如何捕获文件流中的 和行位置,c#
本文关键字:位置 何捕获 文件 | 更新日期: 2023-09-27 18:13:41
我有一个.CSV文件,它保存的数据看起来像这样:
Sana Paden,1098,64228,46285,2/15/2011
Ardelle Mahr,1242,85663,33218,3/25/2011
Joel Fountain,1335,10951,50866,5/2/2011
Ashely Vierra,1349,5379,87475,6/9/2011
Amado Loiacono,1406,62789,38490,7/17/2011
Joycelyn Dolezal,1653,14720,13638,8/24/2011
Alyse Braunstein,1657,69455,52871,10/1/2011
Cheri Ravenscroft,1734,55431,58460,11/8/2011
Russ Leth,9720,77542,72705,12/16/2011
我试图设置指针的行,而读取数据与Filestream。
- 我可以设置指针的硬盘位置的每一行的文件在c# ?
- 我可以看到每行有多少字节,但我不能告诉每行从哪里开始…
- 你能在流中确定每一行的终止位置吗?
这段代码读取文件,目前没有问题:
public static void seeks()
{
using (FileStream fs = new FileStream(@"C:'Users'bussard'Documents'James T work'SourceDatatoedit.csv", FileMode.Open, FileAccess.Read))
{
fs.Seek(0, SeekOrigin.Begin);
while ((nextByte = fs.ReadByte()) >= 0)
{
Console.Write(Convert.ToChar(nextByte));
}
Console.WriteLine();
}
}
我想你是指'r'n
?对于你想要做的事情,我假设你会想要这样的东西
using (FileStream fs = new FileStream(path))
using (StreamReader sr = new StreamReader(fs))
{
while (!sr.EndOfStream)
Console.WriteLine(sr.ReadLine());
}
StreamReader类用于处理文本文件。
读取时存储文件流的位置。然后使用Seek导航到位置,这样你就可以在你存储/期望的位置进行阅读。我认为你应该将字节数与这个位置一起存储,这样你就可以在此时执行Read,而不是再次执行ReadByte。
我希望我能把你的答案都标记正确达伦和布兰德,因为你给我的建议帮助我找到了我在这里寻找的答案。我能够根据新行出现的位置建立一个基于指针的系统。让我把我的代码贴出来给你看看我做了什么。
public static void seeks()
{
long offset = 0;
string streamsample = "";
int numoflines = 0;
using (FileStream fs = new FileStream(@"C:'Users'bussard'Documents'JamesTwork'SourceDatatoedit.csv", FileMode.Open, FileAccess.Read))
{
fs.Seek(offset, SeekOrigin.Begin);
StreamReader sr = new StreamReader(fs);
{ //determines how many lines are in my file.
while (!sr.EndOfStream)
{
streamsample = sr.ReadLine();
numoflines++;
}// end while block
Console.WriteLine("Lines: " + numoflines);
}//end stream sr block
long[] dataArray = new long[numoflines]; //create a long array based on amount of lines
fs.Seek(offset, SeekOrigin.Begin);
StreamReader dr = new StreamReader(fs);
{create an array of long values based on where new lines occur as pointers.
numoflines = 0;
streamsample = "";
while (!dr.EndOfStream)
{
streamsample = dr.ReadLine();
dataArray[numoflines] = offset;
offset += streamsample.Length - 1;
numoflines++;
}// end while
int j = 0;
while (j < numoflines)
{ // displays the pointer and what data is at that point.
fs.Seek(dataArray[j], SeekOrigin.Begin);
Console.WriteLine("Pointer: " + dataArray[j].ToString() + " String: " + dr.ReadLine().ToString());
j++;
}//end while
}//end streamReader dr block
}//end filestream fs block
}// end method seeks ()