C# 将file.Close()与StreamWriter一起使用

C# 将file.Close()与StreamWriter一起使用,c#,.net,streamwriter,C#,.net,Streamwriter,我在尝试使用该文件时遇到问题。使用此方法关闭StreamWriter,它似乎不喜欢它。有人能演示一下如何做到这一点吗。这样做的原因是,另一个方法访问正在使用的文件,因此无法访问,因为另一个方法仍在使用该文件 迄今为止的代码: private static void TrimColon() { using (StreamWriter sw = File.AppendText(@"process_trimmed.lst")) { StreamReader sr = n

我在尝试使用该文件时遇到问题。使用此方法关闭StreamWriter,它似乎不喜欢它。有人能演示一下如何做到这一点吗。这样做的原因是,另一个方法访问正在使用的文件,因此无法访问,因为另一个方法仍在使用该文件

迄今为止的代码:

private static void TrimColon()
{
    using (StreamWriter sw = File.AppendText(@"process_trimmed.lst"))
    {
        StreamReader sr = new StreamReader(@"process_trim.lst");
        string myString = "";
        while (!sr.EndOfStream)
        {

            myString = sr.ReadLine();
            int index = myString.LastIndexOf(":");
            if (index > 0)
                myString = myString.Substring(0, index);

            sw.WriteLine(myString);
        }
    }
}


由于using语句,StreamWriter关闭并刷新。因此无需调用close。

由于using语句,StreamWriter将关闭并刷新。因此无需呼叫close。

您也应该关闭StreamReader。呃,它在哪里?您忘记用using语句包装StreamReader。文件保持打开状态。@Hans Passant您能演示一下吗?您也应该关闭StreamReader。呃,它在哪里?您忘记用using语句包装StreamReader。文件被打开了。@Hans Passant你能演示一下吗?我很困惑,Ivan Danilov声称文件没有关闭,Hans Passant似乎也这么认为well@Ben. 您的StreamWriter已关闭并刷新,因为它位于using语句中。但是StreamReader并没有关闭。我很困惑,伊万·达尼洛夫声称它没有关闭,汉斯·帕桑似乎也这么认为well@Ben. 您的StreamWriter已关闭并刷新,因为它位于using语句中。但是StreamReader并没有关闭。因此,也将其放在using语句中。@myermian所以我会像这样调用TrimColon:TrimColoninput.txt,output.txt??在您的例子中,TrimColon@process_trim.lst,@process_.lst@myermian由于某种原因,上面的代码不会自动创建process_trimmed.lst,它需要存在:SBecause File.AppendText要求文件已经存在。如果您使用的文件名可能不存在。。。我将更新代码。@myermian是的,该文件不存在,因此引发错误exception@myermian所以我将TrimColon称为:TrimColoninput.txt,output.txt??在你的例子中,TrimColon@process_trim.lst,@process_.lst@myermian由于某种原因,上面的代码不会自动创建process_trimmed.lst,它需要存在:SBecause File.AppendText要求文件已经存在。如果您使用的文件名可能不存在。。。我将更新代码。@myermian是的,该文件不存在,因此引发异常
private static void TrimColon(String inputFilePath, String outputFilePath)
{
    //Error checking file paths
    if (String.IsNullOrWhiteSpace(inputFilePath))
        throw new ArgumentException("inputFilePath");
    if (String.IsNullOrWhiteSpace(outputFilePath))
        throw new ArgumentException("outputFilePath");

    //Check to see if files exist? - Up to you, I would.

    using (var streamReader = File.OpenText(inputFilePath))
    using (var streamWriter = File.AppendText(outputFilePath))
    {
        var text = String.Empty;

        while (!streamReader.EndOfStream)
        {
            text = streamReader.ReadLine();

            var index = text.LastIndexOf(":");
            if (index > 0)
                text = text.Substring(0, index);

            streamWriter.WriteLine(text);
        }
    }
}