首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# StreamReader阅卷问题

C# StreamReader阅卷问题
EN

Stack Overflow用户
提问于 2011-03-07 19:32:49
回答 2查看 825关注 0票数 3

我试图做的是记住我在输入流中的位置,然后再回到那里。在java中使用mark()和reset()非常简单,但我不知道如何在c#中实现这一点。没有这样的方法。

例如

代码语言:javascript
运行
复制
public int peek() 
{
    try 
    {
        file.x; //in java file.mark(1)
        int tmp = file.read();
        file.+ //in java file.reset();
        return tmp;
    } 
    catch (IOException ex) {} 
    return 0;
}
EN

回答 2

Stack Overflow用户

发布于 2011-03-07 19:38:13

事实上,据我所知没有。但是,您可以使用类似Stack的东西,并简单地将()和Pop()推掉,以使您的标记按顺序上下移动:

代码语言:javascript
运行
复制
FileStream file = new FileStream(...);

try {
  Stack<long> markers = new Stack<long>();

  markers.Push(file.Position);

  file.Read(....);

  file.Seek(markers.Pop(),SeekOrigin.Begin);
} finally {
  file.Close();
}

另一个基于字典的想法:

代码语言:javascript
运行
复制
FileStream file = new FileStream(...);

try {
  Dictionary<string,long> markers = new Dictionary<string,long>();

  markers.Add("thebeginning",file.Position);

  file.Read(....);

  file.Seek(markers["thebeginning"],SeekOrigin.Begin);
} finally {
  file.Close();
}
票数 5
EN

Stack Overflow用户

发布于 2011-03-07 19:49:34

如果它是您正在使用的StreamReader,那么您必须记住,它本身并不是一个Stream,但是您可以访问它的BaseStream属性:

代码语言:javascript
运行
复制
StreamReader reader = new StreamReader("test.txt");
Stream stream = reader.BaseStream;

它将提供您在流中的当前位置:

代码语言:javascript
运行
复制
long pos = stream.Position;

它将允许你搬回原处:

代码语言:javascript
运行
复制
stream.Seek(pos, SeekOrigin.Begin);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5219152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档