在 FileStream 中移动位置 (C#)

Move position in FileStream (C#)

我有一个这样的txt文件

#header1
#header2
#header3
....
#headerN
ID Value Pvalue
a  0.1  0.002
b  0.2  0.002
...

我的代码将尝试解析

FileStream fs = new FileStream(file, FileMode.Open, FileMode.Read);
......
Table t = Table.Load(fs);

我想要的是让 Stream 的起始位置正好在 "ID" 之前,这样我就可以将流提供给代码并制作一个新的 table。但我不确定什么是正确的方法。 提前致谢

试试这个代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace ConsoleApplication57
{
    class Program
    {
        const string file = "";
        static void Main(string[] args)
        {
            FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
            StreamReader reader = new StreamReader(fs);
            string inputline = "";
            State state = State.FIND_HEADER;
            while((inputline = reader.ReadLine()) != null)
            {
                switch (state)
                {
                    case State.FIND_HEADER:
                        if (inputline.StartsWith("#header"))
                        {
                            state = State.READ_TABLE;
                        }
                        break;
                    case State.READ_TABLE:
                        Table t = Table.Load(fs);
                        break;
                }
            }
        }
        enum State
        {
            FIND_HEADER,
            READ_TABLE
        }

    }
}

理想情况下,您应该将 Table.Load 转换为 IEnumerable<string> 或至少 StreamReader,而不是原始 Stream

如果这不是一个选项,您可以将整个文件读入内存,跳过它的 header,并将结果写入 MemoryStream:

MemoryStream stream = new MemoryStream();
using (var writer = new StreamWriter(stream, Encoding.UTF8);
    foreach (var line in File.ReadLines(fileName).SkipWhile(s => s.StartsWith("#"))) {
        writer.WriteLine(line);
    }
}
stream.Position = 0;
Table t = Table.Load(stream);