我想读取一个文件,但不是从文件的开头,而是在文件的特定点。例如,我想在文件开头的 977 个字符之后读取一个文件,然后一次读取接下来的 200 个字符。谢谢。
问问题
2928 次
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 回答