Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法写入已关闭的TextWriter_C#_Text Files_Textwriter - Fatal编程技术网

C# 无法写入已关闭的TextWriter

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

我正在尝试将文本写入我的txt文件。在第一次写入后,应用程序会因错误而崩溃

无法写入已关闭的TextWriter

我的列表包含浏览器打开的链接,我想将它们全部保存在txt文件(如日志)中

我的代码:

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()
。使用
可以解决这个问题。有什么方法可以让我看到文件中的所有链接?我的意思是在这个过程的中间,而我仍然在声明中。