vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
LOF - Das My-Feature bietet eine höhere Produktivität und Leistung bei Datei-E/A 
Autor: Schudi
Datum: 31.10.14 07:55

Bei der Umsetzung eines alten VB6-Codes nach VB.NET (VB 2010) bin ich auf folgende Zeile gestoßen:

Private Function WriteText(cText As String) As Long
    Dim n As Long
    n = FreeFile
    Open FileName For Append As #n
    WriteText = LOF(n)
    Print #n, cText & vbLf;
    Close #n
End Function
Mittels LOF wird hier offensichtlich die Länge einer geöffneten Datei ermittelt.

Hierzu bekomme ich die Meldung "Das My-Feature bietet eine höhere Produktivität und Leistung bei Datei-E/A-Vorgängen als LOF. Weitere Informationen finden Sie unter FileSystem."

Ist damit folgendes gemeint?

   Private Function WriteText(ByVal cText As String) As Long
 
        Dim fi As FileInfo
        fi = My.Computer.FileSystem.GetFileInfo("C:\Test\Test.pdf")
        WriteText = CLng(fi.Length)
 
        'das eigentliche schreiben per StreamWriter lasse ich hier mal weg, da 
        ' es nur um das LOF geht
 
    End Function
1) Liege ich damit richtig? Oder wäre das so falsch?
2) Ist das gemeint? Oder liege ich da völlig daneben?
3) Funktioniert FileInfo.Length auch bei geöffneten Dateien? Hier gab es ja die Unterscheidung nach LOF und FileLen (brachte die Länge beim Open und nicht die tatsächliche Länge der Datei).
4) Ist die Produktivität wirklich sooo viel höher? Oder geht es hier eigentlich um was ganz anderes?

Vielen Dank für Eure Hilfe schonmal im Voraus.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: LOF - Das My-Feature bietet eine höhere Produktivität und Leistung bei Datei-E/A 
Autor: Manfred X
Datum: 31.10.14 08:21

Hallo!

Du liegst richtig ...
Die Length-Eigenschaft in IO.FileInfo greift direkt auf diese Windows-Struktur zu:
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365739%28v=vs.85%29.aspx
Das gilt auch für den Zugriff über My.Computer.FileSystem.
Die LOF-Methode arbeitet statt dessen mit Reflection.


LOF gibt die aktuelle Länge der Datei um Zeitpunkt der Abfrage an.
Das kann z.B. Daten in einem I/O-Buffer einschließen.
"FileLen" bzw. "FileInfo" geben die im Windows-Dateisystem verzeichnete Länge der
Datei an.

Um aktuelle Angaben zu einer geöffneten Datei zu erhalten, stehen die Methoden
des "IO.FileStream" zur Verfügung.

Beitrag wurde zuletzt am 31.10.14 um 08:35:00 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: LOF - Das My-Feature bietet eine höhere Produktivität und Leistung bei Datei-E/A 
Autor: Schudi
Datum: 31.10.14 12:46

Vielen Dank Manfred X,

dann habe ich das wohl richtig verstanden.

Wenn wir zugrunde legen, dass mein FileStream "fs" heißt, dann müsste mir also

Dim Laenge as Long
Laenge = fs.Length
das richtige Ergebnis bei einer noch geöffneten Datei bringen?
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: LOF - Das My-Feature bietet eine höhere Produktivität und Leistung bei Datei-E/A 
Autor: Manfred X
Datum: 31.10.14 13:12

Mir ist nicht Gegenteiliges bekannt.

Hier eine low-level Demo (Text als Bytefolge im Stream anhängen).
Voraussetzung: Das Verzeichnis C:\daten existiert
    Private Sub FileLengthDemo()
 
        Dim filename As String = "C:\daten\textdemo.txt"
 
        Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8
 
        My.Computer.FileSystem.WriteAllText(filename, "Das ist ein Text", _
          False, enc)
 
        Dim fl0 As Long = New IO.FileInfo(filename).Length
 
        Dim fl1, fl2, fl3, fl4, fl5 As Long
 
        Using fs As New IO.FileStream(filename, IO.FileMode.Open, _
          IO.FileAccess.ReadWrite)
 
            fl1 = fs.Length
 
            fs.Position = fs.Length
 
            Dim anh As String = vbCrLf & "Angehängter Text"
            Dim textbytes() As Byte = enc.GetBytes(anh)
 
            fs.Write(textbytes, 0, textbytes.Length)
 
            fl2 = fs.Length  'aktuelle Länge
 
            fl3 = FileLen(filename) 'Länge beim Öffnen
 
            fs.Flush() 'alles speichern
 
            fl4 = FileLen(filename) 'aktuelle Länge
 
        End Using
 
        fl5 = FileLen(filename)
 
    End Sub


Beitrag wurde zuletzt am 31.10.14 um 13:21:46 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: LOF - Das My-Feature bietet eine höhere Produktivität und Leistung bei Datei-E/A 
Autor: Schudi
Datum: 31.10.14 13:50

Perfekt. Danke. Dem ist wohl nichts mehr hinzuzufügen.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel