如何捕获文件流中的 和行位置,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。

  1. 我可以设置指针的硬盘位置的每一行的文件在c# ?
  2. 我可以看到每行有多少字节,但我不能告诉每行从哪里开始…
  3. 你能在流中确定每一行的终止位置吗?

这段代码读取文件,目前没有问题:

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();
        }
    }

如何捕获文件流中的

和行位置,c#

我想你是指'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 ()