C# 无法写入已关闭的TextWriter
我正在尝试将文本写入我的txt文件。在第一次写入后,应用程序会因错误而崩溃 无法写入已关闭的TextWriter 我的列表包含浏览器打开的链接,我想将它们全部保存在txt文件(如日志)中 我的代码:C# 无法写入已关闭的TextWriter,c#,text-files,textwriter,C#,Text Files,Textwriter,我正在尝试将文本写入我的txt文件。在第一次写入后,应用程序会因错误而崩溃 无法写入已关闭的TextWriter 我的列表包含浏览器打开的链接,我想将它们全部保存在txt文件(如日志)中 我的代码: FileStream fs = new FileStream( "c:\\linksLog.txt", FileMode.Append, FileAccess.Write); StreamWriter sw = new StreamWriter(fs); f
FileStream fs = new FileStream(
"c:\\linksLog.txt", FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
for (int i = 0; i < linksList.Count; i++)
{
try
{
System.Diagnostics.Process.Start(browserType, linksList[i]);
}
catch (Exception) { }
using (sw)
{
sw.WriteLine(linksList[i]);
sw.Close();
}
Thread.Sleep((int)delayTime);
if (!cbNewtab.Checked)
{
try
{
foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName == getProcesses)
{
process.Kill();
}
}
}
catch (Exception) { }
}
}
FileStream fs=newfilestream(
“c:\\linksLog.txt”,FileMode.Append,FileAccess.Write);
StreamWriter sw=新StreamWriter(fs);
对于(int i=0;i
问题在于,您正在关闭循环中的流,只有在
FileStream fs = new FileStream("c:\\linksLog.txt", FileMode.Append, FileAccess.Write);
StreamWriter sw = new StreamWriter(fs);
for (int i = 0; i < linksList.Count; i++)
{
try
{
System.Diagnostics.Process.Start(browserType, linksList[i]);
}
catch (Exception)
{
}
// Removed the using blocks that closes the stream and placed at the end of loop
sw.WriteLine(linksList[i]);
Thread.Sleep((int)delayTime);
if (!cbNewtab.Checked)
{
try
{
foreach (Process process in Process.GetProcesses())
{
if (process.ProcessName == getProcesses)
{
process.Kill();
}
}
}
catch (Exception)
{ }
}
}
sw.Close();
FileStream fs=newfilestream(“c:\\linksLog.txt”,FileMode.Append,FileAccess.Write);
StreamWriter sw=新StreamWriter(fs);
对于(int i=0;i
您处于for
循环中,但您在第一次迭代时关闭并处置了StreamWriter
:
using (sw)
{
sw.WriteLine(linksList[i]);
sw.Close();
}
相反,请删除该块,并使用block将所有内容包装在一个中:
using (var sw = new StreamWriter(@"C:\linksLog.txt", true)) {
foreach (var link in linksList) {
try {
Process.Start(browserType, list);
} catch (Exception) {}
sw.WriteLine(link);
Thread.Sleep((int)delayTime);
if (!cbNewtab.Checked) {
var processes = Process.GetProcessesByName(getProcesses);
foreach (var process in processes) {
try {
process.Kill();
} catch (Exception) {}
}
}
}
}
线路
using (sw)
关闭/处置您的StreamWriter
由于您正在循环,因此需要处理一个已处理的StreamWriter
最好在所有写入操作完成后,在循环外部关闭StreamWriter
此外,捕获异常并忽略捕获的异常几乎总是一个坏主意。如果你不能处理一个异常,不要抓住它。 < P>这是因为你确实在循环的中间关闭了你的流。在中间使用“代码”>(SW)< /代码>块,在<<>代码> 循环中,它将运行良好,然后崩溃。要修复它,只需放弃sw.Close()
调用,并使用将移动到for
循环之外:不要在代码中写入sw.Close()
,因为如果文件关闭,代码将无法读取文件。在使用完StreamWriter(sw)之前不要关闭它。使用“using”如果流是在中间处理的,但是如果应用程序在中间崩溃了,你可以调用“代码> SW.FrHuSH()/代码>如果你想在每次迭代中将数据写入磁盘,虽然一般来说,<代码>使用< /代码>调用转换为<代码>尝试{} catch {}最后{sw·处置();}调用,所以即使抛出异常,流已正确关闭。如果要使用,需要编写close()?在我的代码中放在哪里?您不需要显式调用Close()
。使用
的可以解决这个问题。有什么方法可以让我看到文件中的所有链接?我的意思是在这个过程的中间,而我仍然在声明中。