从txt文件读取和写入

时间:2013-10-08 20:19:20

标签: c# file-io

我正在尝试使用C#从txt文件读取和写入。目前,我正在编写一个程序,该程序读取列表中的名称,向用户显示这些名称,请求另一个名称,然后将该名称添加到列表中。阅读很好,但写作存在一些问题。

使用CSC编译代码很好,并且执行正常,但在我输入要添加的名称并按Enter后,我会弹出一个窗口说

  

FileIO.exe遇到问题,需要关闭。

知道问题是什么吗?

using System;
using System.IO;

public class Hello1
{
    public static void Main()
    {   
        int lines = File.ReadAllLines("Name.txt").Length;
        string[] stringArray = new string[lines + 1];
        StreamReader reader = new StreamReader("Name.txt");
        for(int i = 1;i <=lines;i++){
            stringArray[i-1] = reader.ReadLine();
        }
        for (int i = 1;i <=stringArray.Length;i++){
            Console.WriteLine(stringArray[i-1]);
        }
        Console.WriteLine("Please enter a name to add to the list.");
        stringArray[lines] = Console.ReadLine();
        using (System.IO.StreamWriter writer = new System.IO.StreamWriter("Name.txt", true)){
            writer.WriteLine(stringArray[lines]);
        }
    }
}

5 个答案:

答案 0 :(得分:2)

您收到异常是因为您没有关闭reader,只需在将文件读取到Array后放置reader.Close();即可。

更好的是使用using语句,因为StreamReader使用IDisposable接口,这将确保关闭流以及处理它。

string[] stringArray = new string[lines + 1];
using (StreamReader reader = new StreamReader("Name.txt"))
{
    for (int i = 1; i <= lines; i++)
    {
        stringArray[i - 1] = reader.ReadLine();
    }
}

只是旁注

你只是使用File.ReadAllLines来获取Length ???,你可以填充你的数组:

string[] stringArray = File.ReadAllLines("Name.txt");

而不是通过StreamReader

答案 1 :(得分:2)

我们如何简化这一点:

foreach (var line in File.ReadLines("Name.txt"))
{
    Console.WriteLine(line);
}
Console.WriteLine("Please enter a name to add to the list.");
var name = Console.ReadLine();
File.AppendLine("Name.txt", name):

现在你根本没有处理IO,因为你通过完全利用这些静态方法将它留给了框架。

答案 2 :(得分:1)

确保您了解控制台应用程序顶层的任何异常是很好的:

public class Hello1
{
    public static void Main()
    {
        try
        {
            // whatever
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception!);
            Console.WriteLine(ex.ToString());
        }
        finally
        {
            Console.Write("Press ENTER to exit: ");
            Console.ReadLine();
        }
    }
}

这样,您就会知道为什么应用程序必须关闭。

此外,您需要将StreamReader放在using区块中。

答案 3 :(得分:0)

如果要将文件中的所有行读取到数组中,只需使用:

string[] lines = File.ReadAllLines("Name.txt");

并使用该数组。

答案 4 :(得分:-2)

使用这样的reader.ReadToEnd函数,不要忘记在完成后关闭阅读器。:

StreamReader reader = new StreamReader("Name.txt");
string content = reader.ReadToEnd();
reader.Close();

您获得该异常的原因是因为您在阅读后没有关闭阅读器。因此,如果没有先调用Close(),就无法写入;方法

你也可以使用using语句而不是像这样关闭它:

using (StreamReader reader = new StreamReader("Name.txt")){
    string content = reader.ReadToEnd();
};