用c#开发一个文件读取例程
本文关键字:一个 文件 读取 例程 开发 | 更新日期: 2023-09-27 18:12:36
我使用c#.net开发了一个文件读取例程,它将使用合适的数据类或结构将整个文件内容读入内存。
我有一个600MB的文本文件,其中有RoadId和许多其他条目。我必须使用查询方法读取该文件,所以我使用c#.net中的流阅读器逐行读取。但是我想知道在c#.net中是否有其他的方法可以节省内存和更少的时间,或者通过将文本转换为二进制然后读取。
不知道,请指导我。
我把我的代码读取整个文件一行一行…
public static void read_time()
{
DateTime end;
StreamReader file =
new StreamReader(@"C:'Users'Reva-Asus1'Desktop'DTF Test'F_Network_out.txt");
DateTime start = DateTime.Now;
while ((file.ReadLine()) != null) ;
end = DateTime.Now;
Console.WriteLine();
Console.WriteLine("Full File Read Time: " + (end - start));
Console.WriteLine();
file.Close();
Console.WriteLine("Data is read");
Console.ReadLine();
return;
}
//这个查询方法是从控制台获取用户的roadId并显示记录....
public static void querying_method()
{
Console.WriteLine("Give a RoadId to search record'n");
DateTime start, end;
string id =Console.ReadLine().Trim();
try
{
System.IO.StreamReader file =
new System.IO.StreamReader(@"C:'Users'Reva-Asus1'Desktop'DTF Test'F_Network_out.txt");
string line1;
int count = 1;
start = DateTime.Now;
while ((line1 = file.ReadLine()) != null)
{
if(line1 == id)
{
string line2 = " ";
while (count != 14)
{
Console.WriteLine(line2 = file.ReadLine());
count++;
}
int n = Convert.ToInt16(line2);
while (n != 0)
{
Console.WriteLine(line2 = file.ReadLine());
n--;
}
break;
}
}
end = DateTime.Now;
Console.WriteLine("Read Time for the data record: " + (end - start));
Console.ReadLine();
return;
}
catch (Exception)
{
Console.WriteLine("No ID match found in the file entered by user");
Console.ReadLine();
return;
}
}
你可以这样写:
foreach (var line in File.ReadLines(path))
{
// TODO: Parse the line and convert to your object...
}
File.ReadLines(YourPath)
正在后台使用StreamReader,所以你可以继续使用它。这里是参考代码。因此,如果您已经使用StreamReader
和仅读取一行,则不需要更改任何内容。
using (StreamReader sr = new StreamReader(path, encoding))
{
while ((line = sr.ReadLine()) != null)
{
//You are reading the file line by line and you load only the current line in the memory, not the whole file.
//do stuff which you want with the current line.
}
}