如何从C#中的特定光标点开始读取文件?

时间:2010-12-08 20:49:09

标签: c# file file-io writing

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

4 个答案:

答案 0 :(得分:5)

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

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

答案 1 :(得分:2)

您可以使用 Linq 并将char数组转换为字符串。

添加这些命名空间:

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

它显示:如何

方式2

很简单: 使用子串方法

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

祝你好运;

答案 2 :(得分:1)

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

    // read
}

答案 3 :(得分: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
        }