C#.net中的文件处理
这是我想做的事情的清单。我有一份申请表C#.net中的文件处理,c#,.net,C#,.net,这是我想做的事情的清单。我有一份申请表 转到某一行。我知道如何以串行方式进行,但是否有任何方法可以跳转到特定的行号 以查找行的总编号 如果文件不是太大,您可以尝试 这会将整个文件读入一个字符串数组,其中每一行都是数组的一个元素 例如: var fileName = @"C:\MyFolder\MyFileName.txt"; var contents = System.IO.File.ReadAllLines(fileName); Console.WriteLine("Line: 10: "
如果文件不是太大,您可以尝试 这会将整个文件读入一个字符串数组,其中每一行都是数组的一个元素 例如:
var fileName = @"C:\MyFolder\MyFileName.txt";
var contents = System.IO.File.ReadAllLines(fileName);
Console.WriteLine("Line: 10: " + contents[9]);
Console.WriteLine("Number of lines:");
Console.WriteLine(contents.Lenght);
但要注意:这会将整个文件读入内存。
如果文件太大:
打开文件(),并创建一个字典来存储每行的偏移量。扫描每一行,并存储偏移量。现在你可以到每一行,你有了行数
var lineOffset = new Dictionary<int, long>();
using (var rdr = System.IO.File.OpenText(fileName)) {
int lineNr = 0;
lineOffset.Add(0,0);
while (rdr.ReadLine() != null)) {
lineNr++;
lineOffset.Add(lineNr, rdr.BaseStream.Position);
}
// Goto line 10
rdr.BaseStream.Position = lineOffset[10];
var line10 = rdr.ReadLine();
}
var lineOffset=newdictionary();
使用(var rdr=System.IO.File.OpenText(文件名)){
int-lineNr=0;
lineOffset.Add(0,0);
while(rdr.ReadLine()!=null)){
lineNr++;
lineOffset.Add(lineNr、rdr.BaseStream.Position);
}
//转到10号线
rdr.BaseStream.Position=lineOffset[10];
var line10=rdr.ReadLine();
}
如果文件不是太大,您可以尝试
这会将整个文件读入一个字符串数组,其中每一行都是数组的一个元素
例如:
var fileName = @"C:\MyFolder\MyFileName.txt";
var contents = System.IO.File.ReadAllLines(fileName);
Console.WriteLine("Line: 10: " + contents[9]);
Console.WriteLine("Number of lines:");
Console.WriteLine(contents.Lenght);
但要注意:这会将整个文件读入内存。
如果文件太大:
打开文件(),并创建一个字典来存储每行的偏移量。扫描每一行,并存储偏移量。现在你可以到每一行,你有了行数
var lineOffset = new Dictionary<int, long>();
using (var rdr = System.IO.File.OpenText(fileName)) {
int lineNr = 0;
lineOffset.Add(0,0);
while (rdr.ReadLine() != null)) {
lineNr++;
lineOffset.Add(lineNr, rdr.BaseStream.Position);
}
// Goto line 10
rdr.BaseStream.Position = lineOffset[10];
var line10 = rdr.ReadLine();
}
var lineOffset=newdictionary();
使用(var rdr=System.IO.File.OpenText(文件名)){
int-lineNr=0;
lineOffset.Add(0,0);
while(rdr.ReadLine()!=null)){
lineNr++;
lineOffset.Add(lineNr、rdr.BaseStream.Position);
}
//转到10号线
rdr.BaseStream.Position=lineOffset[10];
var line10=rdr.ReadLine();
}
这将有助于您的第一点:这将有助于您的第一点:您是否尝试了FileStream类?如果不进行迭代,无法访问文件中的特定行号,也无法获取行号(如果您希望的话,开发人员可以将其隐藏)。如果可以更改文件格式,则可能需要添加一个页眉或页脚,其中的索引会告诉每行的偏移量。是否尝试了FileStream类?如果不进行迭代,就无法访问文件中的特定行号,也无法获取行数(如果您希望的话,开发人员可以将其隐藏)。如果可以更改文件格式,则可能需要添加一个页眉或页脚,其索引告诉每行的偏移量。运行此代码时会显示一个错误。错误1“System.Collections.Generic.Dictionary.Add(int,int)”的最佳重载方法匹配有一些无效参数。我明白了,这是因为位置是长的。我改了密码。您的文件大小是多少?除非您有数百个文件,否则我建议使用ReadAllLines()。更简单的是,这取决于目标机器的规格、你需要这些数据的速度、应用程序中数据的重要性以及你需要在内存中保存数据的时间(毫秒-天)。但我想的是兆字节,在现代计算机上,10MB应该不是问题。在我运行此代码时,会显示一个错误。错误1“System.Collections.Generic.Dictionary.Add(int,int)”的最佳重载方法匹配有一些无效参数。我明白了,这是因为位置是长的。我改了密码。您的文件大小是多少?除非您有数百个文件,否则我建议使用ReadAllLines()。更简单的是,这取决于目标机器的规格、你需要这些数据的速度、应用程序中数据的重要性以及你需要在内存中保存数据的时间(毫秒-天)。但我想的是兆字节,在现代计算机上,10MB应该不是问题。