无法打开其他进程 -使用的文件
本文关键字:文件 进程 其他 | 更新日期: 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。