J'ai un très gros fichier, de presque 2Go. J'essaie d'écrire un processus pour lire le fichier et l'écrire sans la première ligne. J'ai à peu près été capable de lire et d'écrire une ligne à la fois, ce qui prend une éternité. Je peux l'ouvrir, enlever la première ligne et l'enregistrer plus rapidement dans TextPad, même si c'est encore très lent.Lecture et écriture de très gros fichiers texte en C#
J'utiliser ce code pour obtenir le nombre d'enregistrements dans le fichier:
private long getNumRows(string strFileName)
{
long lngNumRows = 0;
string strMsg;
try
{
lngNumRows = 0;
using (var strReader = File.OpenText(@strFileName))
{
while (strReader.ReadLine() != null)
{
lngNumRows++;
}
strReader.Close();
strReader.Dispose();
}
}
catch (Exception excExcept)
{
strMsg = "The File could not be read: ";
strMsg += excExcept.Message;
System.Windows.MessageBox.Show(strMsg);
//Console.WriteLine("Thee was an error reading the file: ");
//Console.WriteLine(excExcept.Message);
//Console.ReadLine();
}
return lngNumRows;
}
Cela ne prend que quelques secondes pour exécuter. Lorsque j'ajoute le code suivant, il faut une éternité pour l'exécuter. Est-ce que je fais quelque chose de mal? Pourquoi l'écriture ajoute-t-elle autant de temps? Des idées sur comment je peux faire ça plus vite?
Nonprivate void ProcessTextFiles(string strFileName)
{
string strDataLine;
string strFullOutputFileName;
string strSubFileName;
int intPos;
long lngTotalRows = 0;
long lngCurrNumRows = 0;
long lngModNumber = 0;
double dblProgress = 0;
double dblProgressPct = 0;
string strPrgFileName = "";
string strOutName = "";
string strMsg;
long lngFileNumRows;
try
{
using (StreamReader srStreamRdr = new StreamReader(strFileName))
{
while ((strDataLine = srStreamRdr.ReadLine()) != null)
{
lngCurrNumRows++;
if (lngCurrNumRows > 1)
{
WriteDataRow(strDataLine, strFullOutputFileName);
}
}
srStreamRdr.Dispose();
}
}
catch (Exception excExcept)
{
strMsg = "The File could not be read: ";
strMsg += excExcept.Message;
System.Windows.MessageBox.Show(strMsg);
//Console.WriteLine("The File could not be read:");
//Console.WriteLine(excExcept.Message);
}
}
public void WriteDataRow(string strDataRow, string strFullFileName)
{
//using (StreamWriter file = new StreamWriter(@strFullFileName, true, Encoding.GetEncoding("iso-8859-1")))
using (StreamWriter file = new StreamWriter(@strFullFileName, true, System.Text.Encoding.UTF8))
{
file.WriteLine(strDataRow);
file.Close();
}
}
Ouverture et fermeture du fichier de sortie pour chaque ligne que vous voulez écrire ne contribue pas à – Steve
comme le dit steve et l'exemple précédent ne fait rien écrit des lignes – kenny
Pourquoi avez-vous besoin de compter le nombre de lignes? Ne peux-tu pas compter les lignes et abandonner le premier en un coup? – BugFinder