Naja für dieses konkrete Problem sind Zeilen in der Tat schwieriger. Die Größe der Datei in Bytes kannst du leicht abfragen, aber frag mal die Zeilenanzahl ab, die du für die Fortschrittsanzeige brauchtest.Quote:
eigentlich nicht.
Was spricht gegen Zeilen!?
Und wie auch schon an den oberen Posts entnommen werden kann, ist eine ProgressBar bei einer Datei die kleiner als 100 MB (und ich glaube kaum, dass du eine 100 MB Datei auslesen willst) unnötig.
Würde auch ziemlich blöd sein, weil wenn ich sie einmal durchgehe, dann kann ich sie auch direkt lesen. Sollte ja nicht doppelt duchlaufen werden.Quote:
Auch kein Problem, nur müsste man vorher die Datei durchgehen,
um zu wissen wieviele Zeilen es gesamt sind. -> Toll für die Performance
Ich gebe dir gerne ein Beispiel, damit du verstehst, warum ich ZEILEN möchte.Quote:
D.h. Bytes auslesen => Ruhe.
Er meinte, im Programm die datei durchgehen. So gesehen, die Zeilen zählen :pQuote:
Originally Posted by GodH@ckerWürde auch ziemlich blöd sein, weil wenn ich sie einmal durchgehe, dann kann ich sie auch direkt lesen. Sollte ja nicht doppelt duchlaufen werden.
Func _FileCountLines($sFilePath) Local $hFile = FileOpen($sFilePath, $FO_READ) If $hFile = -1 Then Return SetError(1, 0, 0) Local $sFileContent = StringStripWS(FileRead($hFile), 2) FileClose($hFile) Local $aTmp If StringInStr($sFileContent, @LF) Then $aTmp = StringSplit(StringStripCR($sFileContent), @LF) ElseIf StringInStr($sFileContent, @CR) Then $aTmp = StringSplit($sFileContent, @CR) Else If StringLen($sFileContent) Then Return 1 Else Return SetError(2, 0, 0) EndIf EndIf Return $aTmp[0] EndFunc ;==>_FileCountLines
Du gehst die Datei durch, währenddessen aktualisierst du nachQuote:
[...]
Hier ist es natürlich viel schöner, wenn ich einfach Zeile für Zeile in eine List<> speichere (jedenfalls ist das meine Meinung).
[...]
Dann müsste er jede Liste in sein Dateiformat "konvertieren", was Schwachsinn ist.Quote:
[...]
c) Bau dir ein Mini Dateiformat das eine Saubere Struktur hat.
Sorg dafür das die Ipadressen immer die selbe Menge an Bytes einnehmen, danach ist es trivial sie eine nach der Anderen auszulesen und den Prozentualen Fortschritt zu errechnen.
[...]
Eigentlich sollte es sogar schneller sein, die Datei im Ganzen zu lesen und dann mit dem Speicher zu arbeiten, als jede Zeile einzeln zu lesen.Quote:
b) Lad die Datei als Bytearray, dort ist es trivial eine Progressbar zu machen, danach arbeitest du mit den Daten im Bytearray. Perfomancetechnisch sicher nicht optimal, aber nachdem die Datei erstmal im Speicher ist dürfte das nurnoch bei wirklich extrem Perfomancenkritischen Sachen nen Problem geben, wofür C# eh nich so super geeigenet wäre.