Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何读取文件?_C#_.net_File Io_Cmd - Fatal编程技术网

C# 如何读取文件?

C# 如何读取文件?,c#,.net,file-io,cmd,C#,.net,File Io,Cmd,我试图让我的程序从一个.txt文件中读取代码,然后读回给我,但由于某种原因,在我编译时它会使程序崩溃。有人能告诉我我做错了什么吗?谢谢!:) 为什么不使用System.IO.File.ReadAllLines(winDir+“\Name.txt”) 如果您只想在控制台中将其显示为输出,那么您可以非常简洁地执行此操作: private static string winDir = Environment.GetEnvironmentVariable("windir"); static void M

我试图让我的程序从一个.txt文件中读取代码,然后读回给我,但由于某种原因,在我编译时它会使程序崩溃。有人能告诉我我做错了什么吗?谢谢!:)


为什么不使用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();
}

如果文件与
.exe
位于同一文件夹中,则只需执行
StreamReader=newstreamreader(“file.txt”)

否则,在File.txt所在的位置,放置文件的完整路径。就我个人而言,我认为如果他们在同一个地方会更容易

从这里开始,它就像
Console.WriteLine(reader.ReadLine())一样简单

如果要同时读取所有行并显示所有行,可以执行for循环:

for (int i = 0; i < lineAmount; i++)
{
    Console.WriteLine(reader.ReadLine());
}
for(int i=0;i
如果希望结果是字符串而不是数组,请使用下面的代码

File.ReadAllText(Path.Combine(winDir, "Name.txt"));

我不喜欢您的解决方案,原因很简单:

1) 我不想把他们都抓起来(试着抓)。为了避免这种情况,请使用
System.IO.file.exist(“YourPath”)

2) 使用此代码,您没有处理streamreader。为了避免这种情况,最好像这样使用using构造函数:
using(StreamReader sr=newstreamreader(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!");

NET framework有多种读取文本文件的方法。每个都有优点和缺点。。。让我们看两个

第一个是许多其他答案都推荐的答案:

String allTxt = File.ReadAllText(Path.Combine(winDir, "Name.txt"));
这将把整个文件读入一个
字符串
。这将是快速和无痛的。但它也有风险。。。如果文件足够大,可能会耗尽内存。即使您可以将整个内容存储到内存中,它也可能足够大,您可以进行分页,并使您的软件运行非常缓慢。下一个选项解决了这个问题

第二种解决方案允许您一次只处理一行,而不将整个文件加载到内存中:

foreach(String line in File.ReadLines(Path.Combine(winDir, "Name.txt")))
  // Do Work with the single line.
  Console.WriteLine(line);
此解决方案可能需要更长的时间处理文件,因为它将更频繁地处理文件内容。。。但是,它可以防止尴尬的内存错误


我倾向于第二种解决方案,只是因为我偏执地把巨大的<代码>字符串加载到内存中。

这不会在编译上崩溃,认为你不能访问“代码> Widir \No.txt < /Case>运行程序,并将错误消息发送到您要得到帮助的地方。请考虑首先查找您的问题标题,即MSDN具有良好的基础。。当执行.exe时,我会看到一个“Program.exe遇到问题,需要关闭”窗口。另外,为什么不
Path.Combine(winDir,Name.txt”)
——甚至更好。我对C#还很陌生,所以我还不确定文件IO的最佳方式是什么。你能解释一下我将如何使用它在我的程序中提取一个值列表吗?谢谢:)上面的方法利用了Using块中的streamreader,因此它基本上完成了您试图做的事情,而不必全部写出。它返回表示文本文件行的字符串数组。感谢您的建议!:)
String allTxt = File.ReadAllText(Path.Combine(winDir, "Name.txt"));
foreach(String line in File.ReadLines(Path.Combine(winDir, "Name.txt")))
  // Do Work with the single line.
  Console.WriteLine(line);