anoniem Geplaatst: 29 april 2007 Delen Geplaatst: 29 april 2007 Ik ben een (simpele) applicatie aan het maken met hulp van Visual Basic 2005 for dummies. Ik heb deze nu in batch formaat maar ik zou graag een windows versie maken die op elke pc is te gebruiken. Ik loop echter tegen een aantal problemen op 1) Hoe kom ik aan de bestandsnaam? Dat is niet het hele pad maar alleen de bestandsnaam zegmaar... filename.tostring is c:/blaat/blaat/123.doc. Ik wil alleen "123.doc" in een string hebben Ik doe het nu zo: [code:1:a74a617376] Private Sub ButtonReplace_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonReplace.Click Dim backupdir As String = "C:\sdk\temp" Dim downloadlocatie As String = "c:\sdk\new\8fcc4b27ae4a1d8.posts" Dim bestandsnaam = "8fcc4b27ae4a1d8.posts" TextBoxBestand.Text = bestandsnaam Dim ftdlocatie As String = TextBoxLocatie.Text Dim backuplocatie As String = ("C:\sdk\" + bestandsnaam) If Directory.Exists(backupdir) Then ' File.Move(oudelocatie, nieuwelocatie) Labeldir2.Visible = True Labeldir2.Text = "Bestand vervangen, backup gemaakt in C:\sdk\" 'Onderste lukt niet vanuit testbuild +Ik moet hier iets mee Dim instance As FileLoadException File.Replace(downloadlocatie, ftdlocatie, backuplocatie) 'File.Copy(downloadlocatie, ftdlocatie) dit werkt niet doordat file al bestaat End If End Sub[/code:1:a74a617376] Andere optie: [code:1:a74a617376] Dim ftdlocatie As String = OpenFileDialog1.FileName.ToString 'De bestandsnaam moet variabel volgen uit de dialog Dim bestandsnaam = "8fcc4b27ae4a1d8.posts" TextBoxBestand.Text = bestandsnaam Dim templocatie As String = ("C:\sdk\temp\" + bestandsnaam) Dim backupdir As String = "C:\sdk\temp\" Try ' Determine whethers the directory exists. If Directory.Exists(backupdir) = False Then ' Create the directory. Directory.CreateDirectory(backupdir) Labeldir1.Visible = True Labeldir1.Text = "C:\sdk\temp aangemaakt" End If If Directory.Exists(backupdir) Then ' File.Move(oudelocatie, nieuwelocatie) Labeldir1.Visible = True Labeldir1.Text = "Locatie bestond al. Bestand gekopierd" File.Copy(ftdlocatie, templocatie) 'File.Copy(ftdlocatie, backupdir) End If Catch f As Exception Console.WriteLine("The process failed: {0}", f.ToString()) End Try[/code:1:a74a617376] probleem is dat als ik File.Copy(ftdlocatie, backupdir) gebruik dat er dan niks wordt gekopierd omdat het commando graag /blabla.post wil. Ik kan achter niet de gehele string hierachter plakken anders zou het ook niet kloppen. In mijnvoorbeeld is de string: D:\Program Files\FTDv3.7.2\profiles\8fcc4b27ae4a1d8.posts Ik wil hiervan alleen 8fcc4b27ae4a1d8.posts opslaan in sommige gevallen. Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 Je kan de filename van het complete pad afhalen door alles karakters te pakken na de laatste backslash (mbv LastIndexOf en Substring): [code:1:13c71f91b6] OpenFileDialog1.FileName.Substring(OpenFileDialog1.FileName.LastIndexOf("\") + 1) [/code:1:13c71f91b6] Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 [quote:c2992605e3="Annie"]Je kan de filename van het complete pad afhalen door alles karakters te pakken na de laatste backslash (mbv LastIndexOf en Substring): [code:1:c2992605e3] OpenFileDialog1.FileName.Substring(OpenFileDialog1.FileName.LastIndexOf("\") + 1) [/code:1:c2992605e3][/quote:c2992605e3] Heej bedankt, even proberen:). Wat betekend overigens de +1, ik zag die ook opduiken bij de smartinfo van het File.Replace command (maar heb hem niet gebruikt). Overigens zegt het replace command dat hij het oude bestand niet mag verwijderen, ik ga er maar even vanuit dat het komt dat ik vanuit visual studio start en niet heb geexport naar exe? Of is er dan toch iets mis met de code. Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 De +1 is omdat de functie LastIndexOf() de index van de laatste '\' teruggeeft. Als je dus geen +1 zou gebruiken, dan wordt de bestandsnaam '\123.doc' in plaats van '123.doc' Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 [quote:15b30e5ae2="human printer"]De +1 is omdat de functie LastIndexOf() de index van de laatste '\' teruggeeft. Als je dus geen +1 zou gebruiken, dan wordt de bestandsnaam '\123.doc' in plaats van '123.doc'[/quote:15b30e5ae2] aha ok. Krijg overigens in de "release" versie ook een IO exeption. Hij kan het doelbestand niet verwijderen, hoe los ik dit op? Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 Krijg je de fout alleen in de 'Release' versie of ook in de 'Debug' versie? Je kunt eens kijken of de bestandsnamen echt kloppen (een typefout is gauw gemaakt) door de gebruikte bestandsnamen even via een WriteLine uit te printen en de bestandsnaam te testen met behulp van de File.Exists() methode. Daarnaast kun je eens kijken of het bestand dat verwijderd moet worden misschien nog gelocked is door een ander object binnen je programma of door een ander process dat op je pc draait. Tenslotte kun je nog kijken of er misschien beperkte gebruikersrechten van toepassing zijn op de door jou gebruikte map(pen) waardoor verwijderen niet mogelijk is. Succes Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 [quote:aa135e7495="human printer"]Krijg je de fout alleen in de 'Release' versie of ook in de 'Debug' versie? Je kunt eens kijken of de bestandsnamen echt kloppen (een typefout is gauw gemaakt) door de gebruikte bestandsnamen even via een WriteLine uit te printen en de bestandsnaam te testen met behulp van de File.Exists() methode. Daarnaast kun je eens kijken of het bestand dat verwijderd moet worden misschien nog gelocked is door een ander object binnen je programma of door een ander process dat op je pc draait. Tenslotte kun je nog kijken of er misschien beperkte gebruikersrechten van toepassing zijn op de door jou gebruikte map(pen) waardoor verwijderen niet mogelijk is. Succes[/quote:aa135e7495] Ik heb even gekeken, je kan in debug mouse over doen op de variabelen en die zagen er toch goed uit. Even copy past naar uitvoeren leverde de vraag van windows op wat ik met het bestand wilde doen (.posts). Heb voor de zekerheid even een ' voor de variabele definitie gezet en gewoon gedaan: Dim ftdlocatie As String = "D:\Program Files\FTDv3.7.2\profiles\8fcc4b27ae4a1d8.posts" Maar hierna is het nog steeds niet goed (in de debug versie). Enige programma wat het gebruikt is FTD, die staat uit (net uitgezet). Bestand staat niet op alleen lezen ofzo. Zou me alleen kunnen voorstellen dat .NET geen .posts file aankan omdat de extentie uit 5 letters bestaat... Met mijn dos batch file variant (copy blabla1 blabla2) lukt het zonder problemen. Moet ik bepaalde rechten aan mijn programma toekennen op 1 of andere manier? Bepaalde imports? Heb nu deze: Imports System.Net Imports System.Net.Mail Imports System.IO Imports System edit: gek File.delete en daarna File.copy werkt wel. Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 Ok met dat delete en dan copy gaat het goed dus laat maar zo:). Wel 1 vraagje nog... [code:1:19a4f91fea] Dim bestandsnaam = TextBoxLocatie.Text.Substring(TextBoxLocatie.Text.LastIndexOf("\") + 1) Dim ftdlocatiedir As String = TextBoxLocatie.Text.Substring(TextBoxLocatie.Text - bestandsnaam)[/code:1:19a4f91fea] dit werkt helaas niet, is er een andere manier juist het eerste deel vd string te achterhalen? Wil namelijk dat het mogelijk is de locatie in te typen ipv alleen via de dialog. Default staat deze al op C maar ik zelf heb bijv op D geinstalleerd. Ik ga dan natuurlijk niet helemaal naar d bladeren maar typ handmatig even een D in. Het programma moet dan echter wel de waarde uit de textbox gebruiken ipv uit de dialog. Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 Wellicht ten overvloede: filenames uit een path trekken doe je het beste met "Path.GetFileName(...)". Quote Link naar reactie
anoniem Geplaatst: 30 april 2007 Auteur Delen Geplaatst: 30 april 2007 [quote:ee979996be="Bill Gates"]Wellicht ten overvloede: filenames uit een path trekken doe je het beste met "Path.GetFileName(...)".[/quote:ee979996be] Ok het werkte al:) maar dat andere lijkt mee ook wel handig... zal het verwerken. MAar heb je ook iets om juist de filename er weer af te halen? Wil checken of de door de user opgegeven dir wel bestaat. Daar moet immers het nieuwe bestand heen. Quote Link naar reactie
anoniem Geplaatst: 1 mei 2007 Auteur Delen Geplaatst: 1 mei 2007 Kijk eens naar de klassen File, FileInfo, Directory en DirectoryInfo (allen in de System.IO namespace). Deze klassen bevatten diverse handige methodes waarmee je je vraagstuk ongetwijfeld op kunt lossen. Kijk ook eens in de [url=http://msdn2.microsoft.com/en-us/library/aa388745.aspx].Net Class Library[/url]. Daar staan van alle standaard klasses de methodes en dergelijke beschreven. De meesten zelfs met een voorbeeldje erbij. Quote Link naar reactie
anoniem Geplaatst: 2 mei 2007 Auteur Delen Geplaatst: 2 mei 2007 [quote:3e6b3a66ea="Bill Gates"]Wellicht ten overvloede: filenames uit een path trekken doe je het beste met "Path.GetFileName(...)".[/quote:3e6b3a66ea] Dat is een goede opmerking. Deze vraag is op dit forum zeer uitgebreid behandeld. Ook op het Liberty BASIC forum [url]http://www.libertybasic.nl/viewtopic.php?t=53[/url] De programmeurs bij Microsoft hebben hun functie backward compatibel gemaakt. Daarom is die het best te gebruiken. Abcott Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen