簡體   English   中英

在C#中寫入文件的問題

[英]An Issue With Writing In A File In C#

我開發了一個簡單的程序,詢問用戶是否要向文件中添加新記錄或顯示文件中包含的所有記錄,但是似乎在寫入文件時遇到了問題。 該文件已創建,但仍未寫入任何內容。 讀取功能工作正常,因為我在文件中寫入了一些內容以查看其是否有效。

這是代碼...

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace F01
{
    class Program
    {
        static int ID;
        static String Name;
        static void Main(string[] args)
        {
            FileStream MyFiler = new FileStream("MyFile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);
            StreamReader FileReader = new StreamReader(MyFiler);
            StreamWriter FileWriter = new StreamWriter(MyFiler);
            Console.WriteLine("Please Select One Of The Following Options... ");
            Console.WriteLine("1. Enter A New Record In The File.");
            Console.WriteLine("2. Read All The Records From The File.");
            int Choice = int.Parse(Console.ReadLine());
            if (Choice == 1)
            {
                Console.WriteLine("Enter The ID: ");
                ID = int.Parse(Console.ReadLine());
                FileWriter.WriteLine(ID);
                Console.WriteLine("Enter The Name: ");
                Name = Console.ReadLine();
                FileWriter.WriteLine(Name);
            }

            else if (Choice == 2)
            {
                FileWriter.Close();
                String fileText = File.ReadAllText("MyFile.txt");
                for (int i = 0; i < fileText.Length; i++)
                {
                    Console.Write(fileText[i]);
                }
            }
            FileReader.Close();
        }
    }
}

提前致謝 :)

您不會在使用它的唯一情況下關閉編寫器-“選擇1”。 基本上,數據正在緩沖中,並且由於您尚未關閉編寫器而在進程退出時丟失。

強烈建議您:

  • 僅在需要時打開文件
  • 使用本地變量而不是類變量,除非你需要他們在其他方法
  • 使用File靜態方法可以使所有這些操作更容易
  • 使用using語句在它們的末尾清理資源(如果您根本需要作家或流,那就是...)
  • 將您的代碼分解為用於單獨操作的方法
  • camelCase而不是PascalCase命名變量
  • 一次打印一行而不是一封信

因此,例如:

using System;
using System.IO;

class Program
{
    const string FileName = "MyFile.txt";

    static void Main(string[] args)
    {
        Console.WriteLine("Please Select One Of The Following Options... ");
        Console.WriteLine("1. Enter A New Record In The File.");
        Console.WriteLine("2. Read All The Records From The File.");
        int choice = int.Parse(Console.ReadLine());
        switch (choice)
        {
            case 1:
                AddEntry();
                break;
            case 2:
                ReadFile();
                break;
            default:
                Console.WriteLine("Sorry, that's not a valid option");
                break;
        }
   }

   static void AddEntry()
   {
       Console.WriteLine("Enter the ID:");
       int id = int.Parse(Console.ReadLine());
       Console.WriteLine("Enter the name:");
       string name = Console.ReadLine();
       File.AppendAllLines(FileName, new[] { id.ToString(), name });
   }

   static void ReadFile()
   {
       foreach (var line in File.ReadLines(FileName))
       {
           Console.WriteLine(line);
       }
   }
}

我看到您的MyFilerIDisposable類型的FileStream類型,沒有包裝在using語句中,也沒有手動調用.Dispose() 與您的讀者相同(也是一次性類型)。 這可能導致這種行為...

嘗試以下方法:

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace F01
{
    class Program
    {
        static int ID;
        static String Name;
        static void Main(string[] args)
        {
            using(FileStream MyFiler = new FileStream("MyFile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                using(StreamReader FileReader = new StreamReader(MyFiler))
                {
                    using(StreamWriter FileWriter = new StreamWriter(MyFiler))
                    {
                        Console.WriteLine("Please Select One Of The Following Options... ");
                        Console.WriteLine("1. Enter A New Record In The File.");
                        Console.WriteLine("2. Read All The Records From The File.");
                        int Choice = int.Parse(Console.ReadLine());
                        if (Choice == 1)
                        {
                            Console.WriteLine("Enter The ID: ");
                            ID = int.Parse(Console.ReadLine());
                            FileWriter.WriteLine(ID);
                            Console.WriteLine("Enter The Name: ");
                            Name = Console.ReadLine();
                            FileWriter.WriteLine(Name);
                        }

                        else if (Choice == 2)
                        {
                            FileWriter.Close();
                            String fileText = File.ReadAllText("MyFile.txt");
                            for (int i = 0; i < fileText.Length; i++)
                            {
                                Console.Write(fileText[i]);
                            }
                        }
                        FileReader.Close();
                    }
                }
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM