在 C# 中,文本文件没有显示到控制台 [重复]

Posted

技术标签:

【中文标题】在 C# 中,文本文件没有显示到控制台 [重复]【英文标题】:A text file is not getting displayed to the console in c# [duplicate] 【发布时间】:2019-12-03 23:38:31 【问题描述】:

我正在尝试用 c# 制作一个琐事游戏。我想为问题和答案加载一个简单的 .txt 文件。但我似乎无法将问题显示到控制台。这是加载.txt文件的代码

static void LoadData(string filename)
    
        try
        
            using(StringReader reader = new StringReader(filename))
            
                string line;

                while((line = reader.ReadLine()) != null)
                
                    Console.WriteLine(line);
                
            
        
        catch(Exception e)
        
            Console.WriteLine("File could not be read");
            Console.WriteLine(e.Message);
        
    

这是我试图向控制台显示问题的代码。现在所发生的只是显示文本文件的位置,没有别的。

 static void Main(string[] args)
    
        string filename = @"C:\Trivia\questions.txt";

        LoadData(filename);
    

文本文件如下所示

What is another name for SuperMan?
What is Superman's only weakness?
What is the name of Batman's secret identity?
Batman protects what city?
How did Spiderman get his superpowers?
This superheros tools include a bullet-proof braclets and a magic lasso.Who is she?
Which superhero has an indestructible sheild?
Which superhero cannot transformback into human form?
What villan got his distinctive appearance form toxic chemicals?
What is the name of the archnemesis of the Fantastic Four?    

我真的不确定自己做错了什么。任何建议将不胜感激。

谢谢

【问题讨论】:

或者您可以使用单行:Console.WriteLine(File.ReadAllText(filename)); System.IO.File 类有许多有用的静态方法,可用于将所有文件作为字符串(如上)或@ 987654326@,使用ReadAllLines,以及写入文件的方法。它是“reader”和“writer”类的一个方便的包装器。 如果您有新问题 - 提出新问题,不要将现有问题编辑为完全不同的问题。我回滚了您的更改,因为它在现有问题中提出了一个新问题,并且(更重要的是)使现有答案无效。 (问题本身实际上有规范的问答,显示了读取文本文件的各种方式......) 【参考方案1】:

您需要使用StreamReader,而不是StringReader(通过File.OpenRead 或使用文件路径构造函数):

static void LoadData(string filename)

    try
    
        using (StreamReader reader = new StreamReader(filename))
        
            string line;

            while ((line = reader.ReadLine()) != null)
            
                Console.WriteLine(line);
            
        
    
    catch (Exception e)
    
        Console.WriteLine("File could not be read");
        Console.WriteLine(e.Message);
    

StringReader 在您传入的字符串上为您提供TextReader,在您的情况下是文件名,而不是文件内容。

正如@Rufus L 所指出的那样,您也可以使用File.ReadAllLines,它会为您提供一个全部在内存中的字符串数组,而不是像现在这样流式传输它。

【讨论】:

嗯,有道理。非常感谢。我遇到了另一个问题,现在我已经更新了原始问题。 乐于助人。 string.Split 想要 char,所以你需要用单引号引用逗号,所以 ` 而不是 " 好的,试过了,但我在开头收到了这条消息File could be read index was outside of the bounds of the array,但随后文本文件被读取并显示了所有内容。【参考方案2】:

尝试使用 StringReader 的 StreamReader

using (StreamWriter text= new StreamWriter(@"file.txt"))

    text.WriteLine("The first line");
    text.WriteLine("This text is on the second line");
    text.WriteLine("And the third one.");
    text.Flush();

Console.WriteLine("The file has been successfully written.");

// appending a text to the file
using (StreamWriter sw = new StreamWriter(@"file.txt", true))

    sw.WriteLine("An appended line");
    sw.Flush();

Console.WriteLine("A new line has been successfully appended into the file.");

// printing the contents of the file
Console.WriteLine("Printing file contents:");

using (StreamReader sr = new StreamReader(@"file.txt"))

    string s;
    while ((s = sr.ReadLine()) != null)
    
        Console.WriteLine(s);
    

Console.ReadKey();

【讨论】:

以上是关于在 C# 中,文本文件没有显示到控制台 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用文本区域在多行中显示文本[重复]

C# 重复文本到语音合成

C#找出控件是不是显示在屏幕上[重复]

避免在textarea中换行[重复]

下划线文本区域中的部分文本[重复]

C# Winform如何打开指定的文件夹?