为什么FileInfo.OpenWrite()在FileInfo.Create()之后直接调用会抛出异常?

时间:2010-04-20 13:58:02

标签: .net file-io

我直接从MSDN中取了一个例子。我想创建一个文件并立即写入。我希望使用FileInfo对象。所以我创建了一个新的FileInfo对象,调用Create然后打开一个FileStream。当我尝试打开FileStream时,我得到一个异常,告诉我另一个进程正在使用该文件。 (是我)。

我直接复制粘贴MSDN示例,他们的代码遭受同样的困扰。我/他们做错了什么? (P.S.Net 3.5)

更新:以下代码来自MSDN

的STRAIGHT
    string path = @"c:\MyTest.txt";
    FileInfo fi = new FileInfo(path);

    if (!fi.Exists) 
    {
        //Create the file.
        fi.Create();
    }

    // Open the stream for writing.
    using (FileStream fs = fi.OpenWrite()) 
    {
        Byte[] info = 
            new UTF8Encoding(true).GetBytes("This is to test the OpenWrite method.");

        // Add some information to the file.
        fs.Write(info, 0, info.Length);
    }

1 个答案:

答案 0 :(得分:2)

您正在尝试打开已经打开并锁定的文件,如果您打算将其重新用作fi.Create()打开一个允许您阅读的文件流,则需要在创建后调用fi.Close() /自动写入文件。我相信默认情况下Create()只会使用现有文件(如果已存在),因此您可以使用它来初始化文件流。

例如

// Create a reference to a file.
FileInfo fi = new FileInfo("temp.txt");
// Actually create the file.
FileStream fs = fi.Create();
// Modify the file as required, and then close the file.
fs.Close();
// Delete the file.
fi.Delete();