C# 是否将文件光标向上移动?

C# 是否将文件光标向上移动?,c#,file-io,streamreader,C#,File Io,Streamreader,我已经疯狂地在谷歌上搜索过了,但我似乎找不到任何关于这类问题的参考资料 我有一个带有文件的StreamReader对象,我想在文件中读取一定数量的行一定次数,但是,似乎没有任何方法将文件光标移动到文件中的特定位置 (没有代码,因为我不知道如何写这样的东西)您应该能够使用 myStreamReader.BaseStream.Position = desiredPosition; myStreamReader.DiscardBufferedData(); 将流移动到特定位置 编辑:下一个问题是如何

我已经疯狂地在谷歌上搜索过了,但我似乎找不到任何关于这类问题的参考资料

我有一个带有文件的
StreamReader
对象,我想在文件中读取一定数量的行一定次数,但是,似乎没有任何方法将文件光标移动到文件中的特定位置


(没有代码,因为我不知道如何写这样的东西)

您应该能够使用

myStreamReader.BaseStream.Position = desiredPosition;
myStreamReader.DiscardBufferedData();
将流移动到特定位置

编辑:下一个问题是如何找到所需的
职位
。由于您希望在文件中向后移动位置,而不是向前移动,因此您在某个点读取了每个位置。您需要在读取行时跟踪您在流中的位置,并将位置存储在
列表位置中。最初,列表应在位置0处包含
0
。处理行时,将行的长度加上换行符的大小添加到列表中。当您想返回第
k
行时,
位置[k]
应该具有您需要的位置

例如,如果您的文件具有以下行,则编码将每个字母使用一个字符,并且文件中的行分隔符为Windows style
\r\n

Quick
brown fox
jumps over lazy
dog
然后您的
位置
列表应该有
{0,7,17,34}
注意,我在每行添加了2个分隔符

另外,这是一个丑陋的解决方案,不是吗?如果有什么安慰的话,你不是第一个遇到它的人。2007年,有人想解决类似的问题。

Stream.Seek()
()是您需要的,但这是文件中的绝对位置,没有换行的概念


我更喜欢将这些行读入集合内存,然后在加载接下来的几行之前,在内存中尽可能频繁地迭代集合。事实上,除非你说的是傻笑字节的数据,否则只需读取
列表中作为
字符串
对象的所有行,然后根据需要对其执行任何操作。

无法定位到准确的行。。。仅限于文件中的绝对或相对字节。。。如果您需要定位到某一行,您需要自己实现这一点-通过将文件加载到
字符串[]
(不建议用于大文件!)或者扫描文件并建立一个包含每行绝对位置的索引,以便您以后可以使用该索引到所需的行…

您需要某个位置(如17)还是指某个行(如3行)?某一行,但该行始终是相同的字符(一行包含'{'字符)无法定位到精确的行…只能定位到文件中的绝对或相对字节…如果需要定位到一行,则需要自己实现-将文件加载到字符串[]或扫描文件并建立包含每行绝对位置的索引。。。