无法打开其他进程 -使用的文件

本文关键字:文件 进程 其他 | 更新日期: 2023-09-27 18:33:54

我有一个C#程序,可以在一个大文本文件中读取。 该文件的旧版本使用了一些VBNet调用。 。

  ff = VBNET.FileSystem.FreeFile();
  VBNET.FileSystem.FileOpen(ff, sPath, VBNET.OpenMode.Input, VBNET.OpenAccess.Default, VBNET.OpenShare.Default, -1);
  while (!(VBNET.FileSystem.EOF(ff)))   //  )start       Do Until EOF(tf);
  {
      VBNET.FileSystem.Input(ff, ref sMyString);
. . .

这是古老的,并且通过将逗号解释为 EOL 而引起问题,所以我决定用 System.IO 调用替换它们......

        System.IO.File.Open(sPath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite); 
        System.IO.StreamReader file = new System.IO.StreamReader(sPath);
        while ((sMyString = file.ReadLine()) != null)
        {
     . . . 

但是我得到"该进程无法访问文件'C:''Users''Peter''WorkAtHome'Chain.txt,因为它正被另一个进程使用。但是在使用 VBNet 调用的旧版本的代码中我没有收到该错误。 而且我没有在记事本中得到它,我可以在那里阅读和写它! 而且我没有证据表明该文件实际上被另一个进程使用。 我的语法基于读取另一个进程使用的文件的答案 - 即使在这种情况下它实际上被另一个进程使用(即,我认为错误是虚假的)。(所以不要将其标记为该副本) 我做错了什么?

无法打开其他进程 -使用的文件

System.IO.File.Open(sPath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite); 
System.IO.StreamReader file = new System.IO.StreamReader(sPath);

这里的问题可能是因为当您尝试使用 StreamReader (sPath) 在第二行再次读取文件时,第一行 (File.Open) 已经保持文件打开状态

你能试试吗

using(FileStream fs = System.IO.File.Open(sPath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite))
{
    using(System.IO.StreamReader filesr = new System.IO.StreamReader(fs))
    {
        //read from streamreader
    }
}

请注意,File.Open 创建的 FileStream 对象将传递给 StreamReader