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