我正在尝试从文件夹中读取文本文件,但当前该文件正由另一个进程访问。因此,我得到一个例外,“......文件被另一个进程访问”。
我正在使用以下代码
class program
{
static void Main(string[] args)
{
string lFileData = string.Empty;
try
{
if (args.Count() > 0)
lFileData = ReadLogFile(args[0]);
Console.WriteLine("{0}", lFileData);
}
catch(Exception ex)
{
Console.WriteLine("{0}", ex.Message.ToString());
}
Console.ReadLine();
}
public static string ReadLogFile(string sFileLocation)
{
string lResult = string.Empty;
var inStream = new FileStream(sFileLocation, FileMode.Open, FileAccess.Read, FileShare.Read);
using (var reader = new StreamReader(inStream))
{
lResult= reader.ReadToEnd();
}
return lResult;
}
}
但是当我们通过记事本打开同一个文件时,即使文件被另一个进程访问,也会显示文本文件的内容。
我们想要做同样的事情 - 阅读文件的内容而不进行任何修改。 因此我尝试了这个:
var inStream = new FileStream(sFileLocation, FileMode.Open, FileAccess.Read, FileShare.Read);
然而,即便如此,我们也会得到同样的例外。
有人可以帮忙解决这个问题吗?
答案 0 :(得分:3)
记事本可能正在做的是制作文件的副本,然后从中读取。如果您尝试在记事本中保存,它将为您提供您遇到的错误。
因此,解决此问题的一种方法是制作文件的副本(File.Copy()
)并打开它。
答案 1 :(得分:0)
System.IO.FileStream fs = new System.IO.FileStream(txtFilePath.Text, System.IO.FileMode.Open, System.IO.FileAccess.Read,System.IO.FileShare.ReadWrite);
System.IO.StreamReader sr = new System.IO.StreamReader(fs);
List<String> lst = new List<string>();
while (!sr.EndOfStream)
lst.Add(sr.ReadLine());
注意更改为ReadWrite。
http://msdn.microsoft.com/en-us/library/system.io.fileshare(v=vs.110).aspx
答案 2 :(得分:0)
using (FileStream fs =
new FileStream(sFileLocation,
FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
您的文件可能已被写锁定,因此请尝试使用FileShare.ReadWrite
。