我正在尝试让我的程序从.txt中读取代码,然后将其读回给我,但由于某种原因,它会在编译时崩溃程序。有人能让我知道我做错了什么吗?谢谢! :)
using System;
using System.IO;
public class Hello1
{
public static void Main()
{
string winDir=System.Environment.GetEnvironmentVariable("windir");
StreamReader reader=new StreamReader(winDir + "\\Name.txt");
try {
do {
Console.WriteLine(reader.ReadLine());
}
while(reader.Peek() != -1);
}
catch
{
Console.WriteLine("File is empty");
}
finally
{
reader.Close();
}
Console.ReadLine();
}
}
答案 0 :(得分:3)
如果您的文件与.exe
位于同一文件夹中,您只需StreamReader reader = new StreamReader("File.txt");
否则,在File.txt所在的位置,放置文件的完整路径。就个人而言,我认为如果他们在同一个地方会更容易。
从那里开始,它就像Console.WriteLine(reader.ReadLine());
如果您想要读取所有行并一次显示所有行,您可以执行for循环:
for (int i = 0; i < lineAmount; i++)
{
Console.WriteLine(reader.ReadLine());
}
答案 1 :(得分:3)
我不喜欢你的解决方案有两个简单的原因:
1)我不喜欢所有人(尝试捕获)。为避免使用System.IO.File.Exist("YourPath")
2)使用此代码,您尚未配置流读取器。为了避免这种情况,最好使用如下的using构造函数:using(StreamReader sr=new StreamReader(path)){ //Your code}
用法示例:
string path="filePath";
if (System.IO.File.Exists(path))
using (System.IO.StreamReader sr = new System.IO.StreamReader(path))
{
while (sr.Peek() > -1)
Console.WriteLine(sr.ReadLine());
}
else
Console.WriteLine("The file not exist!");
答案 2 :(得分:1)
为什么不使用System.IO.File.ReadAllLines(winDir +“\ Name.txt”)
如果您要做的只是在控制台中将其显示为输出,那么您可以非常紧凑地执行此操作:
private static string winDir = Environment.GetEnvironmentVariable("windir");
static void Main(string[] args)
{
Console.Write(File.ReadAllText(Path.Combine(winDir, "Name.txt")));
Console.Read();
}
答案 3 :(得分:1)
如果您希望将结果作为字符串而不是数组,请使用以下代码。
File.ReadAllText(Path.Combine(winDir, "Name.txt"));
答案 4 :(得分:0)
using(var fs = new FileStream(winDir + "\\Name.txt", FileMode.Open, FileAccess.Read))
{
using(var reader = new StreamReader(fs))
{
// your code
}
}
答案 5 :(得分:0)
.NET框架有多种方式来读取文本文件。每个人都有利有弊......让我们通过两个。
第一个是许多其他答案推荐的那个:
String allTxt = File.ReadAllText(Path.Combine(winDir, "Name.txt"));
这会将整个文件读入单个String
。这将是快速和无痛的。它带来了风险......如果文件足够大,你可能会耗尽内存。即使您可以将整个内容存储到内存中,它也可能足够大,您将具有分页功能,并且会使您的软件运行速度非常慢。下一个选项解决了这个问题。
第二种解决方案允许您一次使用一行,而不是将整个文件加载到内存中:
foreach(String line in File.ReadLines(Path.Combine(winDir, "Name.txt")))
// Do Work with the single line.
Console.WriteLine(line);
此解决方案可能需要更长时间才能生成文件,因为它会对文件内容进行更多工作......但是,它可以防止出现内存错误。
我倾向于采用第二种解决方案,但这只是因为我对于将巨大的Strings
加载到内存中是一种偏执。