มีหลายวิธีในการอ่านและเขียนไฟล์ ( ไฟล์ข้อความไม่ใช่ไบนารี) ใน C #
ฉันต้องการสิ่งที่ง่ายและใช้รหัสน้อยที่สุดเพราะฉันจะทำงานกับไฟล์จำนวนมากในโครงการของฉัน ฉันต้องการเพียงบางสิ่งบางอย่างstring
ตั้งแต่ทั้งหมดที่ฉันต้องการก็คือการอ่านและเขียนstring
s
มีหลายวิธีในการอ่านและเขียนไฟล์ ( ไฟล์ข้อความไม่ใช่ไบนารี) ใน C #
ฉันต้องการสิ่งที่ง่ายและใช้รหัสน้อยที่สุดเพราะฉันจะทำงานกับไฟล์จำนวนมากในโครงการของฉัน ฉันต้องการเพียงบางสิ่งบางอย่างstring
ตั้งแต่ทั้งหมดที่ฉันต้องการก็คือการอ่านและเขียนstring
s
คำตอบ:
ใช้File.ReadAllTextและFile.WriteAllText
มันไม่ง่ายกว่านี้ ...
ตัวอย่าง MSDN:
// Create a file to write to.
string createText = "Hello and Welcome" + Environment.NewLine;
File.WriteAllText(path, createText);
// Open the file to read from.
string readText = File.ReadAllText(path);
"foo".Write(fileName)
คุณสามารถสร้างส่วนขยายเพื่อทำเช่นนั้นpublic static Write(this string value, string fileName) { File.WriteAllText(fileName, value);}
และใช้ในโครงการของคุณ
นอกจากนี้ในการFile.ReadAllText
, File.ReadAllLines
และFile.WriteAllText
(และผู้ช่วยที่คล้ายกันจากFile
ระดับ) แสดงในคำตอบอื่นที่คุณสามารถใช้StreamWriter
/ StreamReader
ชั้นเรียน
การเขียนไฟล์ข้อความ:
using(StreamWriter writetext = new StreamWriter("write.txt"))
{
writetext.WriteLine("writing in text file");
}
อ่านไฟล์ข้อความ:
using(StreamReader readtext = new StreamReader("readme.txt"))
{
string readText = readtext.ReadLine();
}
หมายเหตุ:
readtext.Dispose()
แทนได้using
แต่จะไม่ปิดไฟล์ / reader / writer ในกรณีที่มีข้อยกเว้นusing
/ Close
เป็นสาเหตุที่พบบ่อยมากของ "เหตุใดจึงไม่เขียนข้อมูลลงในไฟล์"using
สตรีมของคุณตามที่แสดงในคำตอบอื่น ๆ - stackoverflow.com/a/7571213/477420
using System.IO;
การใช้StreamWriterและStreamReader
new StreamWriter("write.txt", true)
มันจะสร้างไฟล์หากไม่มีไฟล์อยู่มิฉะนั้นไฟล์จะต่อท้ายไฟล์ที่มีอยู่
FileStream fs = new FileStream(txtSourcePath.Text,FileMode.Open, FileAccess.Read);
using(StreamReader sr = new StreamReader(fs))
{
using (StreamWriter sw = new StreamWriter(Destination))
{
sw.writeline("Your text");
}
}
fs
ไปในตอนท้าย?
using (var file = File.Create("pricequote.txt"))
{
...........
}
using (var file = File.OpenRead("pricequote.txt"))
{
..........
}
เรียบง่ายใช้งานง่ายและกำจัด / ล้างวัตถุเมื่อคุณทำมันเสร็จแล้ว
วิธีที่ง่ายที่สุดในการอ่านจากไฟล์และเขียนไปยังไฟล์:
//Read from a file
string something = File.ReadAllText("C:\\Rfile.txt");
//Write to a file
using (StreamWriter writer = new StreamWriter("Wfile.txt"))
{
writer.WriteLine(something);
}
File.WriteAllText
เขียนส่วนหนึ่ง
@AlexeiLevenkov ชี้ให้ฉันอีก "วิธีที่ง่ายที่สุด" คือวิธีขยาย ใช้การเข้ารหัสเพียงเล็กน้อยจากนั้นให้วิธีที่ง่ายที่สุดในการอ่าน / เขียนรวมถึงมีความยืดหยุ่นในการสร้างรูปแบบต่างๆตามความต้องการส่วนบุคคลของคุณ นี่คือตัวอย่างที่สมบูรณ์:
วิธีนี้จะกำหนดวิธีการขยายในstring
ประเภท โปรดทราบว่าสิ่งเดียวที่สำคัญจริงๆคืออาร์กิวเมนต์ของฟังก์ชั่นที่มีคีย์เวิร์ดพิเศษthis
ที่ทำให้มันอ้างถึงวัตถุที่วิธีการที่แนบมา ชื่อคลาสไม่สำคัญ ชั้นเรียนและวิธีการที่จะต้องstatic
ได้รับการประกาศ
using System.IO;//File, Directory, Path
namespace Lib
{
/// <summary>
/// Handy string methods
/// </summary>
public static class Strings
{
/// <summary>
/// Extension method to write the string Str to a file
/// </summary>
/// <param name="Str"></param>
/// <param name="Filename"></param>
public static void WriteToFile(this string Str, string Filename)
{
File.WriteAllText(Filename, Str);
return;
}
// of course you could add other useful string methods...
}//end class
}//end ns
นี่คือวิธีการใช้งานstring extension method
โปรดทราบว่ามันอ้างอิงโดยอัตโนมัติไปที่class Strings
:
using Lib;//(extension) method(s) for string
namespace ConsoleApp_Sandbox
{
class Program
{
static void Main(string[] args)
{
"Hello World!".WriteToFile(@"c:\temp\helloworld.txt");
return;
}
}//end class
}//end ns
ฉันจะไม่ได้พบสิ่งนี้ด้วยตัวเอง แต่มันใช้งานได้ดีดังนั้นฉันจึงต้องการแบ่งปัน มีความสุข!
นี่เป็นวิธีที่ดีที่สุดและใช้กันมากที่สุดสำหรับการเขียนและอ่านจากไฟล์:
using System.IO;
File.AppendAllText(sFilePathAndName, sTextToWrite);//add text to existing file
File.WriteAllText(sFilePathAndName, sTextToWrite);//will overwrite the text in the existing file. If the file doesn't exist, it will create it.
File.ReadAllText(sFilePathAndName);
วิธีการแบบเก่าซึ่งผมได้รับการสอนในวิทยาลัยคือการใช้เครื่องอ่านกระแส / นักเขียนสตรีม แต่ไฟล์วิธี I / O เป็น clunky น้อยและจำเป็นต้องใช้สายน้อยลงรหัส คุณสามารถพิมพ์ใน "ไฟล์" ใน IDE ของคุณ (ตรวจสอบให้แน่ใจว่าคุณได้รวมคำสั่งการนำเข้า System.IO) และดูวิธีการทั้งหมดที่มี ด้านล่างนี้เป็นตัวอย่างวิธีการอ่าน / เขียนสตริงไปยัง / จากไฟล์ข้อความ (.txt.) โดยใช้แอป Windows Forms
ต่อท้ายข้อความในไฟล์ที่มีอยู่:
private void AppendTextToExistingFile_Click(object sender, EventArgs e)
{
string sTextToAppend = txtMainUserInput.Text;
//first, check to make sure that the user entered something in the text box.
if (sTextToAppend == "" || sTextToAppend == null)
{MessageBox.Show("You did not enter any text. Please try again");}
else
{
string sFilePathAndName = getFileNameFromUser();// opens the file dailog; user selects a file (.txt filter) and the method returns a path\filename.txt as string.
if (sFilePathAndName == "" || sFilePathAndName == null)
{
//MessageBox.Show("You cancalled"); //DO NOTHING
}
else
{
sTextToAppend = ("\r\n" + sTextToAppend);//create a new line for the new text
File.AppendAllText(sFilePathAndName, sTextToAppend);
string sFileNameOnly = sFilePathAndName.Substring(sFilePathAndName.LastIndexOf('\\') + 1);
MessageBox.Show("Your new text has been appended to " + sFileNameOnly);
}//end nested if/else
}//end if/else
}//end method AppendTextToExistingFile_Click
รับชื่อไฟล์จากผู้ใช้ผ่านทางกล่องโต้ตอบสำรวจไฟล์ / เปิดไฟล์ (คุณจะต้องใช้สิ่งนี้เพื่อเลือกไฟล์ที่มีอยู่)
private string getFileNameFromUser()//returns file path\name
{
string sFileNameAndPath = "";
OpenFileDialog fd = new OpenFileDialog();
fd.Title = "Select file";
fd.Filter = "TXT files|*.txt";
fd.InitialDirectory = Environment.CurrentDirectory;
if (fd.ShowDialog() == DialogResult.OK)
{
sFileNameAndPath = (fd.FileName.ToString());
}
return sFileNameAndPath;
}//end method getFileNameFromUser
รับข้อความจากไฟล์ที่มีอยู่:
private void btnGetTextFromExistingFile_Click(object sender, EventArgs e)
{
string sFileNameAndPath = getFileNameFromUser();
txtMainUserInput.Text = File.ReadAllText(sFileNameAndPath); //display the text
}
หรือถ้าคุณเป็นเรื่องของเส้น:
System.IO.File ยังมีเมธอดแบบคงที่WriteAllLinesดังนั้นคุณสามารถทำได้:
IList<string> myLines = new List<string>()
{
"line1",
"line2",
"line3",
};
File.WriteAllLines("./foo", myLines);
เป็นเรื่องที่ดีเมื่ออ่านเพื่อใช้การควบคุม OpenFileDialog เพื่อเรียกดูไฟล์ใด ๆ ที่คุณต้องการอ่าน ค้นหารหัสด้านล่าง:
อย่าลืมเพิ่มusing
คำสั่งต่อไปนี้เพื่ออ่านไฟล์:using System.IO;
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = File.ReadAllText(openFileDialog1.FileName);
}
}
File.WriteAllText
ไปยังไฟล์เขียนคุณสามารถใช้วิธีการ
class Program
{
public static void Main()
{
//To write in a txt file
File.WriteAllText("C:\\Users\\HP\\Desktop\\c#file.txt", "Hello and Welcome");
//To Read from a txt file & print on console
string copyTxt = File.ReadAllText("C:\\Users\\HP\\Desktop\\c#file.txt");
Console.Out.WriteLine("{0}",copyTxt);
}
}
คุณกำลังมองหาFile
, StreamWriter
และStreamReader
ชั้นเรียน
private void Form1_Load(object sender, EventArgs e)
{
//Write a file
string text = "The text inside the file.";
System.IO.File.WriteAllText("file_name.txt", text);
//Read a file
string read = System.IO.File.ReadAllText("file_name.txt");
MessageBox.Show(read); //Display text in the file
}
string.Write(filename)
ทิศทางตามสายของ เหตุใดโซลูชันของ Microsoft จึงเรียบง่ายกว่าดีกว่าของฉัน