Meddelande

Minska
No announcement yet.

Läsa textfil samt radera innehållet

Minska
X
 
  • Filter
  • Klockan
  • Show
Clear All
new posts

  • Läsa textfil samt radera innehållet

    Jag ska läsa ut alla rader i en textfil för att sedan ta bort innehållet i filen..
    Jag har två problem.

    Dels behöver den skrivskyddas så ingen annan applikation kan skriva till den samtidigt..

    Samt hur jag gör snyggast för att radera innehållet??


    Jag Använder följande kod för att läsa ut raderna:

    Kod:
    strTextFil = "C:mintextfil.txt"
    f = FreeFile
    Open strTextFil For Input As #f
    Close f

    Sen är frågan hur jag ska tömma filen, typ nedan. Ett krux är ju om någon skulle skriva till filen mellan dessa två steg?:

    Kod:
    f = FreeFile
    Open strTextFil For Output As #f
    Close f
    Kan man med excel kolla om filen används innan den öppnas, vad jag förstått med den tekniken man använder i excel så är det en kopia av originalet man använder?
    "An nescis, mi fili, quantilla prudentia mundus regatur?"

  • #2
    Blev osäker på vilket språk du använder, är det VB6 till Excel macros eller VB.NET? I vilket fall, du ska inte behöva göra din fil skrivskyddad för att hindra andra applikationer att skriva till den. Om du öppnar filen med Read/Write så kommer filen vara låst till din applikation ända tills du kör File.Close(); Detta har du säkert märkt om du försökt spara en fil, men Windows har sagt "Denna filen används redan av en annan process.. etc. etc.".

    Dock, om en annan applikation har din fil öppen med skrivrättigheter kommer det dyka upp fina felmeddelanden. Du kan inte, vad jag vet, säga att din applikation har "exklusivt" skrivrättigheter till filen. Kanske om man gör det väldigt komplicerat och kör applikationen under annan användare och säger att ingen annan utom den nya användaren har skrivrättigheter till filen i fråga, men det är en dryg omväg.

    Kan inte garantera att koden är rätt VB.NET syntax, men så här hade jag gjort:
    Kod:
           Dim path As String = "C:mintextfil.txt"
            
            If File.Exists(path) = False Then
    			
            Try
                   File.WriteAllText(path, String.Empty)
            Catch ex As Exception
                   Throw ex
            End Try
    			
            End If
    Om det är VB6 så är det väldigt enkelt (dock så kan jag inte Try/Catch i VB6):
    Kod:
           Open "C:mintextfil.txt" As Output #1
           Close #1
    Där kommer din textfil att tömmas.

    Kommentera


    • #3
      Jag kanske borde varit lite tydligare, språket är VB6..
      att använda
      Kod:
      f = FreeFile
      Open strTextFil For Output As #f
      Close f
      Ger igentligen inget skrivskydd men jag har löst det med
      Kod:
      f = FreeFile
      Open strTextfil For Input Access Read Lock Read As #f

      Problemet är hur jag tar bort innehållet ur filen också utan att det fnnns möjlighet för någon annan att skriva till filen under tiden..
      Nu använder jag följande kod för att läsa ut raderna från filen samt att tömma den på innehållet.
      Kod:
      Sub ReadAsciiFile()
      
      Dim strTextfil As String
      Dim strText As String
      Dim f As Integer
      Dim i As Integer
      Dim OrderLines() As String ' declares a dynamic array variable
      
      'Namn och sökväg till textfilen
      strTextfil = "y:test.txt"
      
      If Not IsFileOpen(strTextfil) Then
          
      'vi öppnar textfilen för att kunna läsa från den
      f = FreeFile
      Open strTextfil For Input Access Read Lock Read As #f
      
      'vi läser in textfilsdatan till en array
      i = 1
      While Not EOF(f)
      Line Input #f, strText
      
      ReDim Preserve OrderLines(1 To i)
      OrderLines(fCount) = strText
      
      i = i + 1
      Wend
      
      Close f 'importen är klar och vi stänger ned kopplingen till textfilen
       
      Open strTextfil For Output As #f 'Tömmer txt fil
      Close f
      
      End If
      End Sub
      "An nescis, mi fili, quantilla prudentia mundus regatur?"

      Kommentera

      Working...
      X