| |
VB.NET - Ein- und UmsteigerLOF - 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. | |
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. | |
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? | |
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. | |
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. | |
| 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 |
|
|
Neu! sevCommand 4.0
Professionelle Schaltflächen im modernen Design!
Mit nur wenigen Mausklicks statten auch Sie Ihre Anwendungen ab sofort mit grafischen Schaltflächen im modernen Look & Feel aus (WinXP, Office, Vista oder auch Windows 8), inkl. große Symbolbibliothek. Weitere InfosTipp des Monats TOP Entwickler-Paket
TOP-Preis!!
Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR...
Jetzt nur 599,00 EURWeitere Infos
|
|
|
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
|
|