Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

Programmeren

VB 2005 Alleen de filename ipv gehele pad+filename

abcott
11 antwoorden
  • 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
    ew\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.
  • 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: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.
  • 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="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?
  • 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="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.
  • 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.
  • Wellicht ten overvloede: filenames uit een path trekken doe je het beste met "Path.GetFileName(…)".
  • [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.
  • 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 .Net Class Library. Daar staan van alle standaard klasses de methodes en dergelijke beschreven. De meesten zelfs met een voorbeeldje erbij.

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.