[英]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);
}
}
}
我看到您的MyFiler
是IDisposable
類型的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.