读取和写入文件的最简单方法

在c#中有很多不同的方法来读取和写入文件(文本文件,而不是二进制)。

我只需要一些简单的东西,使用最少的代码,因为我将在我的项目中大量使用文件。我只需要string的一些东西,因为我所需要的是读写string

731675 次浏览

你正在寻找FileStreamWriterStreamReader类。

使用文件。ReadAllText文件。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);

除了另一个答案中显示的File.ReadAllTextFile.ReadAllLinesFile.WriteAllText(以及来自File类的类似helper)之外,你还可以使用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,但它不会在异常情况下关闭文件/读取器/写入器
  • 请注意,相对路径是相对于当前工作目录。您可能希望使用/构造绝对路径。
  • 缺少using/Close是“为什么数据不写入文件”的常见原因。
using (var file = File.Create("pricequote.txt"))
{
...........
}


using (var file = File.OpenRead("pricequote.txt"))
{
..........
}

简单,容易,也处置/清理对象一旦你完成它。

在读取时使用OpenFileDialog控件浏览到您想要读取的任何文件是很好的。找到下面的代码:

不要忘记添加下面的using语句来读取文件

private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
textBox1.Text = File.ReadAllText(openFileDialog1.FileName);
}
}

要写入文件,可以使用方法File.WriteAllText

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");
}
}

@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

我自己永远不会发现这个,但它很棒,所以我想分享这个。玩得开心!

或者,如果你真的很注重线条:

System.IO.File还包含一个静态方法WriteAllLines,所以你可以这样做:

IList<string> myLines = new List<string>()
{
"line1",
"line2",
"line3",
};


File.WriteAllLines("./foo", myLines);

从文件中读取并写入文件的最简单方法:

//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);
}

以下是最好的和最常用的文件读写方法:

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方法不那么笨拙,需要的代码行也更少。您可以在IDE中键入“File.”(确保包含System. File.)。IO import语句),并查看所有可用的方法。下面是使用Windows窗体应用程序从文本文件(.txt.)中读取/写入字符串的示例方法。

向现有文件追加文本:

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
}
     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);
}
}
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
}
  1. 从文件中读取
string filePath = @"YOUR PATH";
List<string> lines = File.ReadAllLines(filePath).ToList();
  1. 写入文件
List<string> lines = new List<string>();
string a = "Something to be written"
lines.Add(a);
File.WriteAllLines(filePath, lines);

简单:

String inputText = "Hello World!";


File.WriteAllText("yourfile.ext",inputText); //writing


var outputText = File.ReadAllText("yourfile.ext"); //reading