大家好我需要做的是跟踪我从流阅读器中读取的行的位置当我说reader.ReadLine()我需要知道文件中该行的位置时我还希望能够从中读取文件我之前跟踪的位置.
这可能吗?如果是这样请协助.
非常感谢帮助
提前致谢.
你可以使用streamreader来读取普通文本文件,然后在保存当前位置后再读取流读取器,然后再次打开streamreader并开始读取该poision吗?
如果不是我可以使用什么来完成相同的情况而不锁定文件?
这样的事情:
var fs = File.Open(@"C:\testfile.txt", FileMode.Open, FileAccess.Read);
var sr = new StreamReader(fs);
Debug.WriteLine(sr.ReadLine());//Prints:firstline
var pos = fs.Position;
while (!sr.EndOfStream)
{
Debug.WriteLine(sr.ReadLine());
}
fs.Seek(pos, SeekOrigin.Begin);
Debug.WriteLine(sr.ReadLine());//Prints Nothing, i expect it to print SecondLine.
Run Code Online (Sandbox Code Playgroud)
@lasseespeholt
这是我试过的代码
var position = -1;
StreamReaderSE sr = new StreamReaderSE(@"c:\testfile.txt");
Debug.WriteLine(sr.ReadLine());
position = sr.BytesRead;
Debug.WriteLine(sr.ReadLine());
Debug.WriteLine(sr.ReadLine());
Debug.WriteLine(sr.ReadLine());
Debug.WriteLine(sr.ReadLine());
Debug.WriteLine("Wait");
sr.BaseStream.Seek(position, SeekOrigin.Begin);
Debug.WriteLine(sr.ReadLine());
Run Code Online (Sandbox Code Playgroud) 我有一个简单的程序来使用StreamReader读取文件并逐行处理.但我正在阅读的文件有时可能位于网络文件夹中.我在使用这样的文件进行一些测试时遇到过,如果网络连接在我正在读取的某个时刻丢失,它将再次保持在同一行,并且在无限循环中循环,产生与结果相同的行来自stream.ReadLine().
有什么方法可以在流本身没有fileHandle时找到?我期待FileReotAvailableException类型的异常会在StreamReader丢失文件句柄时触发.
这是我的代码片段......
string file = @"Z://1601120903.csv"; //Network file
string line;
StringBuilder stb = new StringBuilder();
StreamReader stream = new StreamReader(file, Encoding.UTF8, true, 1048576);
do
{
line = stream.ReadLine();
// Do some work here
} while (line != "");
Run Code Online (Sandbox Code Playgroud) 我只想阅读一个大型CSV文件并将Stream位置保存在列表中.之后我必须从列表中读取位置并将Streamreader的位置设置为该char并读取一行!但在我读完第一行并返回streamposition后
StreamReader r = new StreamReader("test.csv");
r.readLine();
Console.WriteLine(r.BaseStream.Position);
Run Code Online (Sandbox Code Playgroud)
我得到"177",这是文件中的总字符数!(这只是一个简短的示例文件)我没有在这里发现任何类似的东西,它帮助了我!
为什么?
完全方法:
private void readfile(object filename2)
{
string filename = (string)filename2;
StreamReader r = new StreamReader(filename);
string _top = r.ReadLine();
top = new Eintrag(_top.Split(';')[0], _top.Split(';')[1], _top.Split(';')[2]);
int siteindex = 0, index = 0;
string line;
sitepos.Add(r.BaseStream.Position); //sitepos is the a List<int>
while(true)
{
line = r.ReadLine();
index++;
if(!string.IsNullOrEmpty(line))
{
if (index > seitenlaenge)
{
siteindex++;
index = 1;
sitepos.Add(r.BaseStream.Position);
Console.WriteLine(line);
Console.WriteLine(r.BaseStream.Position.ToString());
}
}
else break;
maxsites = siteindex;
}
reading = …Run Code Online (Sandbox Code Playgroud)