我有modscan使用的文本文件将数据写入文件。在特定时间,我必须读取数据并保存在数据库中。在离线模式下;没有modscan使用它我可以读取数据,并很好地保存在数据库中。然而,因为它与modscan在线,它提供了异常
无法访问其他进程使用的文件。
我的代码:
using System.IO;
string path = dt.Rows[i][11].ToString();
string[] lines = System.IO.File.ReadAllLines(@path);
路径有"E:\Metertxt\02.txt"
所以我需要做些什么改变才能在不干扰modscan的情况下阅读它。 我用谷歌搜索,我发现这可能有用,但我不知道如何使用它
FileShare.ReadWrite
答案 0 :(得分:2)
您可以使用FileStream
打开已在其他应用程序中打开的文件。如果你想逐行阅读,那么你需要一个StreamReader
。这是有效的,假设文件编码为UTF8:
using (var stream = new FileStream(@"c:\tmp\locked.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
// Do something with line, e.g. add to a list or whatever.
Console.WriteLine(line);
}
}
}
如果确实需要string[]
:
var lines = new List<string>();
using (var stream = new FileStream(@"c:\tmp\locked.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
lines.Add(line);
}
}
}
// Now you have a List<string>, which can be converted to a string[] if you really need one.
var stringArray = lines.ToArray();
答案 1 :(得分:0)
FileStream fstream = new FileStream("@path", FileMode.Open,FileAccess.Read, FileShare.ReadWrite);
StreamReader sreader = new StreamReader(fstream);
List<string> lines = new List<string>();
string line;
while((line = sreader.ReadeLine()) != null)
lines.Add(line);
//do something with the lines
//if you need all lines at once,
string allLines = sreader.ReadToEnd();