2

我想读取一个文件,但不是从文件的开头,而是在文件的特定点。例如,我想在文件开头的 977 个字符之后读取一个文件,然后一次读取接下来的 200 个字符。谢谢。

4

4 回答 4

6

如果要将文件作为文本读取,请跳过字符(不是字节):

using (var textReader = System.IO.File.OpenText(path))
{
    // read and disregard the first 977 chars
    var buffer = new char[977];
    textReader.Read(buffer, 0, buffer.Length);

    // read 200 chars
    buffer = new char[200];
    textReader.Read(buffer, 0, buffer.Length);
}

如果您只想跳过一定数量的字节(不是字符):

using (var fileStream = System.IO.File.OpenRead(path))
{
    // seek to starting point
    fileStream.Seek(977, SeekOrigin.Begin);

    // read 200 bytes
    var buffer = new byte[200];
    fileStream.Read(buffer, 0, buffer.Length);
}
于 2010-12-08T20:51:18.857 回答
2

您可以使用Linq并将 char 数组转换为 string 。

添加这些命名空间:

using System.Linq;
using System.IO;

然后你可以使用它从你的文本文件中获取一个从索引 a 和 b 字符开始的字符数组:

char[] c = File.ReadAllText(FilePath).ToCharArray().Skip(a).Take(b).ToArray();

然后你可以有一个字符串,包括 c 的连续字符:

string r = new string(c);

例如,我在一个文件中有这个文本:

你好吗 ?

我使用此代码:

char[] c = File.ReadAllText(FilePath).ToCharArray().Skip(6).Take(3).ToArray();               
string r = new string(c);
MessageBox.Show(r);

它显示:如何

方式二

非常简单:使用Substring 方法

string s = File.ReadAllText(FilePath);
string r = s.Substring(6,3);
MessageBox.Show(r);

祝你好运 ;

于 2016-05-29T15:37:42.350 回答
1

如果你想从文件中读取特定的数据类型System.IO.BinaryReader是最好的选择。如果您不确定文件编码使用

        using (var binaryreader = new BinaryReader(File.OpenRead(path)))
        {
            // seek to starting point
            binaryreader.ReadChars(977);
            // read
            char[] data = binaryreader.ReadChars(200);
            //do what you want with data
        }

否则,如果您知道源文件大小中的字符大小为 1 或 2 字节,请使用

        using (var binaryreader = new BinaryReader(File.OpenRead(path)))
        {
            // seek to starting point
            binaryreader.BaseStream.Position = 977 * X;//x is 1 or 2 base on character size in sourcefile
            // read
            char[] data = binaryreader.ReadChars(200);
            //do what you want with data
        }
于 2010-12-08T21:17:22.383 回答
1
using (var fileStream = System.IO.File.OpenRead(path))
{
    // seek to starting point
    fileStream.Position = 977;

    // read
}
于 2010-12-08T20:53:55.143 回答