Tout d'abord, je me suis assuré que je disposais et fermais tout (à la fois le lecteur et l'écrivain) correctement. La méthode que j'utilise est celle de l'instruction using ; et avant cela, j'utilisais manuellement la méthode dispose and close fournie par le rédacteur et le lecteur. Ces deux méthodes ne résoudront pas le problème. Deuxièmement, aussi le point que je soupçonne, je traite beaucoup de fichiers à la fois en lecture et en écriture. De plus, à chaque fois que j'exécute le programme, celui-ci s'enfonce davantage dans la liste des fichiers qui sont censés être traités (par exemple, j'ai 10 fichiers, la première fois que j'exécute le programme, il traitera les 2 premiers avant de lancer l'erreur ; la deuxième fois que j'exécute le programme, il traitera les 5 premiers avant de lancer l'erreur et ainsi de suite). Alors, comment suis-je censé résoudre ce problème/bogue ? Merci d'avance !
Edit - Code joint
public static void FileProcessing(string initPath, string targetPath, string startLine)
{
string line = null;
string content = null;
string nl = "\r\n";
using (StreamReader reader = new StreamReader(initPath))
{
while (!reader.ReadLine().Contains(startLine)) ;
while (!reader.EndOfStream)
{
line = reader.ReadLine();
// Ignore empty line.
if (line.Length > 0)
{
if (!line.Contains("<div"))
content += line += nl;
else
break;
}
}
}
using (StreamWriter writer = new StreamWriter(targetPath))
{
writer.Write(content.Trim());
}
}
/// <summary>
/// Create a temporary text file that correspond to the calendar department page
/// and return the path.
/// </summary>
public static string CreateFile(string path, string title)
{
string npath = path + title + ".txt";
if (!File.Exists(npath))
File.CreateText(npath);
return npath;
}
/// <summary>
/// Return the title of the page.
/// </summary>
/// <param name="path"></param>
public static string GetTitle(string path)
{
string line;
using (StreamReader reader = new StreamReader(path))
{
for (int i = 0; i < 31; ++i)
{
line = reader.ReadLine();
// Ignore empty line.
if (line.Length > 0)
{
if (line.Contains("<h1>"))
{
return line.Slice(4, -5);
}
}
}
return "null";
}
}
/// <summary>
/// Get content from temp path and
/// output the processed text to destination path.
/// </summary>
/// <param name="tempPath"></param>
/// <param name="title"></param>
public static void WriteProcessedText(string tempPath, string targetPath)
{
string content = null;
using (StreamReader reader = new StreamReader(tempPath))
{
string nl = "\r\n";
string line = null;
while (!reader.EndOfStream)
{
line = HtmlRemoval.StripTagsRegex(reader.ReadLine()) + nl;
if (line.Contains(" "))
line = line.Replace(" ", " ");
content += line;
}
}
using (StreamWriter writer = new StreamWriter(targetPath))
{
writer.Write(content.Trim());
}
}