Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.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# 该文件正被另一个进程使用,我必须关闭它吗?怎么用?_C#_Text Files - Fatal编程技术网

C# 该文件正被另一个进程使用,我必须关闭它吗?怎么用?

C# 该文件正被另一个进程使用,我必须关闭它吗?怎么用?,c#,text-files,C#,Text Files,我正在使用一个文本文件来保存一些数据,以供以后使用。所以我要做的是检查文件是否存在,如果不存在,我会在需要时创建一个新文件。这给了我一个错误,即我的文件仍被另一个进程使用,但我不知道为什么会这样 我就是这样做的。在这里,我检查是否存在在程序运行时启动的文件: private void CreateLastOpenFile() { if (!Directory.Exists(directory)) { Directory.Cr

我正在使用一个文本文件来保存一些数据,以供以后使用。所以我要做的是检查文件是否存在,如果不存在,我会在需要时创建一个新文件。这给了我一个错误,即我的文件仍被另一个进程使用,但我不知道为什么会这样

我就是这样做的。在这里,我检查是否存在在程序运行时启动的文件:

    private void CreateLastOpenFile()
    {
        if (!Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }

        if (!File.Exists(file))
        {
            File.Create(file);
        }
    }
现在,我在检查或创建新文件时向其中添加了一些数据(在我的程序中有两个位置):


这里可能出了什么问题?我从网上读了一些例子,但没有看到任何关于关闭任何文件的内容。

File.Create正在创建一个文件流来锁定文件。你应该把它关上。实际上,您甚至不需要创建文件。File.WriteAlltext将为您完成此操作

我建议您使用StreamWriter之类的类一步创建并填充文件中的数据,这样做应该不会有问题,下面是一个示例:

StreamWriter Swr = new StreamWriter(FilePath); 
Swr.Write(Data);          
Swr.Close(); 
Swr.Dispose();
//执行“关闭并处置”可以确保文件不再被锁定


您也可以使用File.WriteAllText(字符串路径,字符串数据),此方法不会锁定文件。

您没有关闭
File.Create()
返回的流句柄


建议不要在您的案例中使用
File.Create()
。您可以只使用
File.WriteAllText(文件,数据)-根据MSDN文档,如果文件不存在,它将创建该文件,或者在文件存在时覆盖其内容。然后关闭文件流。

试试这个。这将在文件创建期间关闭打开的流

 if (!File.Exists(file))
        {
         FileStream str = File.Create(file);
         str.Close();
        }

如果您使用下面的方法将数据写入文本文件,则不需要检查文件是否存在以及是否创建它。“WriteAllText”自己处理所有这些事情。它将创建文件(如果不存在),写入数据并关闭它,或者覆盖文件(如果已经存在)。
File.WriteAllText(文件,数据)

如果使用writeAllText()或readAllText()方法,则不会使用close()方法,因为它们在读取或写入(上述方法)后关闭了文件

 if (!File.Exists(file))
        {
         FileStream str = File.Create(file);
         str.Close();
        }