你可以很容易地做到这一点。
问题分为三个部分。
1)如何找到文件中一行的开始位置。做到这一点的唯一方法是从文件中读取行,保留一个记录该行在文件中的开始位置的列表。例如
列表 lineMap = new List();
lineMap.Add(0); // 第 0 行从数据文件中的位置 0 开始(只是一个虚拟条目)
lineMap.Add(0); // 第 1 行从数据文件中的位置 0 开始
使用 (StreamReader sr = new StreamReader("DataFile.txt"))
{
字符串线;
int lineNumber = 1;
而 ((line = sr.ReadLine()) != null)
lineMap.Add(sr.BaseStream.Position);
}
2)读取索引文件并将其解析为字典。
字典索引 = new Dictionary();
使用 (StreamReader sr = new StreamReader("IndexFile.txt"))
{
字符串线;
而 ((line = sr.ReadLine()) != null)
{
string[] 部分 = line.Split(' '); // 将行分成名称和行号
index.Add(parts[0], Convert.ToInt32(parts[1]));
}
}
然后要在文件中查找一行,请使用:
int lineNumber = index["SECTION_B";]; // 将节名转换为行号
长 offsetInDataFile = lineMap[lineNumber]; // 将行号转换为文件偏移量
然后在 DataFile.txt 上打开一个新的 FileStream,Seek(offsetInDataFile, SeekOrigin.Begin) 移动到行的开头,并使用 StreamReader(如上)从中读取行。