2010-10-22 17 views
5

W naszym spersonalizowanym systemie rejestrowania C# używamy streamWriter = File.CreateText(fileNameStr);, aby utworzyć plik i otworzyć strumień do zapisu.Jaki jest dobry sposób na uzyskanie rozmiaru pliku?

Teraz chcemy monitorować rozmiar pliku, aby sprawdzić, czy osiąga on maksymalny wymagany rozmiar. To, co zrobiłem jest następujący:

  1. utworzenia obiektu FileInfo na temat pliku: currFileInfo = new FileInfo(fileNameStr);
  2. get rozmiar pliku po każdym zapisie: curFileInfo.Refresh(); fileSize = curFileInfo.Length;
  3. porównaj rozmiar pliku z max rozmiar pliku, jeśli większe, zamknij bieżący i utwórz nowy plik.

Mam wydruk, aby zobaczyć, ile czasu zajmie odświeżenie FileInfo, wiele razy zajmie to około 15 ms.

Więc myślę, że może być lepszy sposób na zrobienie tego. jaka jest Twoja sugestia?

+2

Większość typowych ramek logowania obsługuje tę funkcjonalność po wyjęciu z pudełka, najlepiej próbować samodzielnie napisać IMO. – Jamiec

Odpowiedz

6

To powinno działać:

streamWriter.BaseStream.Position; 

ta powinna zawierać aktualną pozycję w strumieniu i jeśli używasz go tylko do dopisywania, powinno zawierać odpowiedni rozmiar pliku.

1
FileSystemWatcher fsw=new FileSystemWatcher(filePath); 
fsw.NotifyFilter=NotifyFilters.Size; 
fsw.Filter="fileName"; 
fsw.Changed += new FileSystemEventHandler(YourHandler); 
fsw.EnableRaisingEvents = True; 
+1

+1 Dobry pomysł, ale powinieneś wspomnieć o tym, co ten kod robi i jak. Jest to podejście inne niż podejście 5 lat, ponieważ tworzy monitor, który będzie wywoływał zdarzenia. Podejście to opiera się na zdarzeniach, w przeciwieństwie do systemu głosowania, z którego rozpoczął się PO. –

Powiązane problemy