C# 如何“取消”文件以便程序的其他部分可以访问它

C# 如何“取消”文件以便程序的其他部分可以访问它,c#,runtime-error,file-access,C#,Runtime Error,File Access,我将以下代码分散在我的程序中。然而,我似乎总是得到下面的错误。即使我使用using括号来处理资源,我仍然不知道为什么会发生这种情况 错误: 进程无法通过文件路径访问文件,因为另一进程正在使用该文件 代码: 我认为您应该首先检查文件是否存在 File.Exists(filePath); 第二件事是,您向StreamReader类传递了错误的参数,该类是一个空字符串,因为您没有为其分配任何内容。首先检查上述内容,您可以参考下面的链接以方便阅读: 尝试此操作后,如果您有任何其他问题,请告诉我。默认

我将以下代码分散在我的程序中。然而,我似乎总是得到下面的错误。即使我使用using括号来处理资源,我仍然不知道为什么会发生这种情况

错误:

进程无法通过文件路径访问文件,因为另一进程正在使用该文件

代码:


我认为您应该首先检查文件是否存在

File.Exists(filePath);
第二件事是,您向StreamReader类传递了错误的参数,该类是一个空字符串,因为您没有为其分配任何内容。首先检查上述内容,您可以参考下面的链接以方便阅读:


尝试此操作后,如果您有任何其他问题,请告诉我。

默认情况下,StreamReader会锁定文件。这会导致您看到的错误。幸运的是,StreamReader接受流作为其构造函数的重载之一。这允许您首先创建一个文件流,它有一个方便的枚举,允许您指定读/写共享,然后将该文件流传递给StreamReader以供使用

因此,在你的情况下:

using(StreamReader sr = new StreamReader(filecreate))
...
变成:

FileStream fs = new FileStream(filecreate, FileMode.Open, FileShare.ReadWrite);
using(StreamReader sr = new StreamReader(fs))
...
有关更多信息,请参见下面的问题。这基本上是同一个问题,只是问得不同而已。公认的答案应该解释得更多一些

编辑

再看一遍你的问题,我发现你的部分问题是你没有关闭你的流。当使用块退出时,它们应该关闭,但最好是自己用sr.close关闭它们

此外,您可能需要将删除标志添加到文件共享选项:

FileStream fs = new FileStream(filecreate, FileMode.Open, FileShare.ReadWrite|FileShare.Delete);
using(StreamReader sr = new StreamReader(fs))
...

您的图像是imgur主页的链接。我把它拿走了。无论如何,请不要发布错误的图片,请只发文本。
FileStream fs = new FileStream(filecreate, FileMode.Open, FileShare.ReadWrite|FileShare.Delete);
using(StreamReader sr = new StreamReader(fs))
...