问题描述
我正在列出给定文件夹中的文件(日志文件),并允许下载文件以及在所有文件中搜索给定的文本。搜索无效。
我尝试下载文件,并注意到今天的文件,我收到“错误:该进程无法访问文件'Z:\ abcd.log',因为该文件正在被另一个进程使用。”我联系了生成此日志文件的开发人员,并被告知今天的日志文件一直保持打开状态,直到午夜(他没有进行打开/写入/关闭操作)。
fStream = new FileStream(filepath,FileMode.Open,FileAccess.Read,FileShare.Read);
我将其更改为:
fStream = new FileStream(filepath,FileShare.ReadWrite);
我使用的ReadAllLines以我的理解(可能是错误的)打开和关闭文件。
public string SearchFiles(string SearchStr,string FolderName,string DaysPrior)
{
string JSONresult = string.Empty;
var dir = Server.UrlDecode(FolderName);
System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(dir);
int iDaysPrior = 0;
if (!string.IsNullOrEmpty(DaysPrior))
iDaysPrior = int.Parse(DaysPrior);
var fileList = di.GetFiles().Where(x => x.LastWriteTime.Date >= DateTime.Today.AddDays(0 - iDaysPrior)).OrderByDescending(f => f.LastWriteTime);
foreach (System.IO.FileInfo fi in fileList)
{
foreach (var line in File.ReadAllLines(fi.FullName))
{
// Using custom extension method
if (line.Contains(SearchStr,StringComparison.CurrentCultureIgnoreCase))
{
// Do something
}
}
}
return JSONresult;
}
解决方案,请参见由psubsee2003提供的信誉和解决方案的注释。
问题在于,ReadAllLines最后在FileAccess.Read模式下使用StreamReader。它不能与具有对该文件的读/写访问权限的另一个应用程序共享文件。根据帖子(对我有用)的解决方案是编写您自己的ReadAllLines。后面的代码来自帖子,以防帖子itelf一天消失。
public string[] WriteSafeReadAllLines(String path)
{
using (var csv = new FileStream(path,FileShare.ReadWrite))
using (var sr = new StreamReader(csv))
{
List<string> file = new List<string>();
while (!sr.EndOfStream)
{
file.Add(sr.ReadLine());
}
return file.ToArray();
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)