Come troncare un file in c #?

Sto scrivendo le azioni fatte dal programma in C # in un file usando la funzione Trace.Writeln (). Ma il file sta diventando troppo grande. Come troncare questo file quando diventa 1 MB?

TextWriterTraceListener traceListener = new TextWriterTraceListener(File.AppendText("audit.txt")); Trace.Listeners.Add(traceListener); Trace.AutoFlush = true; 

Cosa dovrebbe essere aggiunto al blocco precedente

    Prova a giocare con FileStream.SetLength

     FileStream fileStream = new FileStream(...); fileStream.SetLength(sizeInBytesNotChars); 

    Chiudere il file e quindi riaprirlo utilizzando FileMode.Truncate .

    Alcune implementazioni di log archiviano il vecchio file con un vecchio nome prima di riaprirlo, per preservare un set di dati più grande senza che il file diventi troppo grande.

    Al contrario di provare a farlo da soli, raccomanderei davvero di usare qualcosa come log4net; ha un sacco di questo tipo di funzionalità utili integrate.

    Quando il file supera i 500000 byte, il file viene tagliato a 250000 byte dal file in modo che il file rimanente sia lungo 250000 byte.

     FileStream fs = new FileStream(strFileName, FileMode.OpenOrCreate); if (fs.Length > 500000) { // Set the length to 250Kb Byte[] bytes = new byte[fs.Length]; fs.Read(bytes, 0, (int)fs.Length); fs.Close(); FileStream fs2 = new FileStream(strFileName, FileMode.Create); fs2.Write(bytes, (int)bytes.Length - 250000, 250000); fs2.Flush(); } // end if (fs.Length > 500000) 

    Facendo questo:

     if(new FileInfo("").Length > 1000000) { File.WriteAllText("", ""); } 

    Forse questa sarebbe una soluzione semplice:

     // Test the file is more or equal to a 1MB ((1 * 1024) * 1024) // There are 1024B in 1KB, 1024KB in 1MB if (new FileInfo(file).length >= ((1 * 1024) * 1024)) { // This will open your file. Once opened, it will write all data to 0 using (FileStream fileStream = new FileStream(file, FileMode.Truncate, FileAccess.Write)) { // Write to your file. } } 

    Se non si desidera mantenere i contenuti o spostarli in un file sussidiario che tiene traccia dell’aggiornamento per il ciclo (sia di giorno che di qualche altra durata del ciclo), è consigliabile semplicemente riscrivere il file utilizzando questo semplice metodo:

      private void Truncate(readFile) // to clear contents of file and note last time it was cleared { string readFile = readPath + ".txt"; string str = string.Format("{0} : Truncated Contents", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt")); using (StreamWriter truncate = new StreamWriter(readFile)) { truncate.WriteLine(str); // truncates and leaves the message with DateTime stamp } } 

    Se, al contrario, si desidera salvare i contenuti in un file per la data in cui sono stati troncati, è ansible utilizzare il seguente metodo in combinazione con quanto sopra:

      private void Truncate(readPath) // to clear contents of file, copy, and note last time it was cleared and copied { if (!File.Exists(readPath)) // create the new file for storing old entries { string readFile = readPath + ".txt"; string writeFile = readPath + DateTime.Now.ToString("_dd-MM-yyyy_hh-mm") + ".txt"; // you can add all the way down to milliseconds if your system runs fast enough using (FileStream fs = new FileStream(writeFile, FileMode.OpenOrCreate, FileAccess.Write)) { using (StreamWriter write = new StreamWriter(fs)) using (StreamReader file = new StreamReader(readFile)) { write.WriteLine(string.Format(textA, DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))); string line; var sb = new StringBuilder(); while ((line = file.ReadLine()) != null) { line = line.Replace("\0", ""); // removes nonsense bits from stream sb.AppendLine(line); } write.WriteLine(sb.ToString()); string textB = "{0} : Copied Source"; write.WriteLine(string.Format(textB, DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt"))); } } string str = string.Format("{0} : Truncated Contents", DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss tt")); using (StreamWriter truncate = new StreamWriter(readFile)) { truncate.WriteLine(str); // truncates and leaves the message with DateTime stamp } } } 

    In ogni caso, puoi utilizzare il metodo che hai scelto con il seguente blocco:

     if(new FileInfo("audit.txt").Length >= 0xfffff) // hex for 1MB { Truncate("audit"); } 

    Spero che questo aiuti i futuri lettori.

    Grazie,

    ç§