一 、读取文本文件有多种方法
1 使用 StreamReader 类打开、读取和关闭文本文件。使用 ReadLine 方法逐行读取文本文件,ReadToEnd方法将文本文件读取到末尾。
/// <summary>
/// 逐行将文本文件读取到末尾
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string ReadTXT_StreamReader(string pathAName)
{
StreamReader ObjectName = new StreamReader(pathAName);
return ObjectName.ReadToEnd();
}
2、StreamReader继承TextReader,操作和StreamReader一致,使用 ReadLine 方法逐行读取文本文件,ReadToEnd方法将文本文件读取到末尾。
/// <summary>
/// 逐行读取文件,返回列表
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static List<string> ReadTXT_TextReader(string pathAName)
{
List<string> txtContent = new List<string>();
if (!File.Exists(pathAName))
{
using (TextReader reader = new StreamReader(pathAName))
{
string line;
while ((line = reader.ReadLine()) != null) // 逐行读取文件内容
{
txtContent.Add(line); // 输出每行内容到控制台
}
}
}
return txtContent;
}
3、使用 File 类打开、读取和关闭文本文件。
File.ReadAllLines(string path, Encoding encoding) 方法:打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。返回包含文件所有行的字符串数组。
/// <summary>
/// 逐行读取文件,返回数组
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string[] ReadTXT_ReadAllLines(string pathAName)
{
string[] txtContent = null;
txtContent = System.IO.File.ReadAllLines(pathAName, Encoding.UTF8);
return txtContent;
}
File.ReadAllText(string path, Encoding encoding)方法:打开一个文件,使用指定的编码读取文件的所有行,然后关闭该文件。逐行读取文本文件。返回包含文件所有行的字符串。
/// <summary>
/// 读取,返回字符串
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string ReadTXT_ReadAllText(string pathAName)
{
string txtContent = null;
txtContent = System.IO.File.ReadAllText(pathAName, Encoding.UTF8);
return txtContent;
}
ReadLines(string path, Encoding encoding)方法:读取具有指定编码的文件的文本行。返回该文件的所有行或查询所示的行。
/// <summary>
/// 读取,返回枚举类型
/// 高效地逐行读取大型文本文件的最佳方法
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string ReadTXT_ReadLines(string pathAName)
{
IEnumerable<string> line = System.IO.File.ReadLines(pathAName, Encoding.UTF8);
return String.Join(Environment.NewLine, line);
}
二、创建、写入文本文件
1、FileStream 创建文件,可设置文件属性,StreamWriter 打开、写入、关闭文件。
a)方式1:
/// <summary>
/// 数据流形式写入文件
/// </summary>
/// <param name="path"></param>
/// <param name="txtContent"></param>
/// <returns></returns>
public static void WriteTXT_StreamWriter(string pathAName, string txtContent)
{
FileStream fs;
//判断是否已经有了这个文件
if (!System.IO.File.Exists(pathAName))
{
//没有则创建这个文件,创建写入文件,设置文件属性为隐藏
fs = new FileStream(pathAName, FileMode.Create, FileAccess.Write);
}
else
{
fs = new FileStream(pathAName, FileMode.Open, FileAccess.Write);
}
File.SetAttributes(@pathAName, FileAttributes.Hidden);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(txtContent.Trim());//写入值
sw.Flush();
sw.Dispose();
sw.Close();
fs.Close();
}
b)方式2
/// <summary>
/// 数据流形式写入文件
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void Write(string pathAName, string Logstring)
{
if (!File.Exists(pathAName))
{
//创建.txt文件
FileStream stream = File.Create(pathAName);
stream.Close();
stream.Dispose();
}
// true:若文件存在,则将数据追加到该文件中若要覆盖该文件
using (StreamWriter writer = new StreamWriter(pathAName, true))
{
//写入文件
writer.WriteLine(Logstring);
writer.Close();
}
}
2、StreamWriter 继承 TextWriter ,StreamWriter 创建、打开、WriteLine 写入文件
/// <summary>
/// 创建、写入文本文档
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void WriteTXT_TextWriter(string pathAName, string Logstring)
{
if (!File.Exists(pathAName))
{
using (TextWriter reader = new StreamWriter(pathAName))
{
reader.WriteLine(Logstring.Trim());
}
}
}
3、使用 File 类创建、写入和关闭文本文件
WriteAllText(string path, string contents) 方法:创建一个新文件,在其中写入指定的字符串,然后关闭文件。如果目标文件已存在,则覆盖该文件。
/// <summary>
/// 在最开始位置追加,追加到开头
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void AddTextFirst(string pathAName, string Logstring)
{
string s = File.ReadAllText(pathAName);
s = s.Insert(0, Logstring.Trim() + "\r\n");
File.WriteAllText(pathAName, s);
}
WriteAllLines(string path, string[] contents) :创建一个新文件,在其中写入指定的字符串数组,然后关闭该文件。
/// <summary>
/// File.WriteAllLines 方法用于将字符串数组的内容按行写入文本文件。
/// 每个数组元素都被写入文件的一行,且方法会自动在每行的末尾添加换行符。
/// </summary>
/// <param name="Logstring"></param>
/// <param name="pathAName"></param>
public static void WriteTXT(string pathAName,string []Logstring)
{
File.WriteAllLines(pathAName, Logstring);//写入文件
}
4、在最开始位置追加,追加到开头
/// <summary>
/// 在最开始位置追加,追加到开头
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void AddTextFirst(string pathAName, string Logstring)
{
string s = File.ReadAllText(pathAName);
s = s.Insert(0, Logstring.Trim() + "\r\n");
File.WriteAllText(pathAName, s);
}
5、在最后位置追加
/// <summary>
/// 在最后位置追加
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void AddTextEnd(string pathAName, string Logstring)
{
StreamWriter sw = File.AppendText(pathAName);
sw.WriteLine(Logstring.Trim());
sw.Close();
}
三、使用实例
OpenFileDialog openFileDialog1;
SaveFileDialog saveFileOpen;
string dir = null;
public Form1()
{
InitializeComponent();
dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
openFileDialog1 = new OpenFileDialog();
openFileDialog1.Title = "导入";
openFileDialog1.Filter = "TXT文件|*.txt";
openFileDialog1.Multiselect = false;
openFileDialog1.RestoreDirectory = true;
openFileDialog1.InitialDirectory = dir;
saveFileOpen = new SaveFileDialog();
saveFileOpen.Title = "保存文件";
saveFileOpen.Filter = "TXT文件(*.txt)|*.txt";
saveFileOpen.RestoreDirectory = true;
saveFileOpen.InitialDirectory = dir;
}
private void richTextBox1_TextChanged(object sender, EventArgs e)
{
richTextBox1.ScrollToCaret();
}
/// <summary>
/// 读入txt文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
string info = null;
string txtContent = null;
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
info = openFileDialog1.FileName;
}
if (!string.IsNullOrEmpty(info))
{
txtContent = OperateTXT.ReadTXT_StreamReader(info);
richTextBox1.AppendText(txtContent);
}
}
/// <summary>
/// 写入txt文件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button2_Click(object sender, EventArgs e)
{
string dir = Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory);
string now_date = DateTime.Now.ToString("MMddHHmmss") + ".txt";
string newPath = System.IO.Path.Combine(dir, now_date);
saveFileOpen.FileName = newPath; //设置默认另存为的名字
if (saveFileOpen.ShowDialog() == DialogResult.OK)
{
newPath = saveFileOpen.FileName;
}
OperateTXT.WriteTxt(newPath, richTextBox1.Text);
}
静态操作使用类
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FileOperationsDemo
{
public static class OperateTXT
{
#region 写入文件
/// <summary>
/// 数据流形式写入文件
/// </summary>
/// <param name="path"></param>
/// <param name="txtContent"></param>
/// <returns></returns>
public static void WriteTXT_StreamWriter(string pathAName, string txtContent)
{
FileStream fs;
//判断是否已经有了这个文件
if (!System.IO.File.Exists(pathAName))
{
//没有则创建这个文件,创建写入文件,设置文件属性为隐藏
fs = new FileStream(pathAName, FileMode.Create, FileAccess.Write);
}
else
{
fs = new FileStream(pathAName, FileMode.Open, FileAccess.Write);
}
File.SetAttributes(@pathAName, FileAttributes.Hidden);
StreamWriter sw = new StreamWriter(fs);
sw.WriteLine(txtContent.Trim());//写入值
sw.Flush();
sw.Dispose();
sw.Close();
fs.Close();
}
/// <summary>
/// 数据流形式写入文件
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void Write(string pathAName, string Logstring)
{
if (!File.Exists(pathAName))
{
//创建.txt文件
FileStream stream = File.Create(pathAName);
stream.Close();
stream.Dispose();
}
// true:若文件存在,则将数据追加到该文件中若要覆盖该文件
using (StreamWriter writer = new StreamWriter(pathAName, true))
{
//写入文件
writer.WriteLine(Logstring);
writer.Close();
}
}
/// <summary>
/// 创建、写入文本文档
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void WriteTXT_TextWriter(string pathAName, string Logstring)
{
if (!File.Exists(pathAName))
{
using (TextWriter reader = new StreamWriter(pathAName))
{
reader.WriteLine(Logstring.Trim());
}
}
}
/// <summary>
/// File.WriteAllText 方法用于将单个字符串写入文本文件。
/// 整个字符串将写入文件,不会自动添加换行符。
/// 如果需要在字符串中包含换行,需要手动添加换行符。
/// </summary>
/// <param name="Logstring"></param>
/// <param name="pathAName"></param>
public static void WriteTxt(string pathAName, string Logstring)
{
File.WriteAllText(pathAName, Logstring);//写入文件
}
/// <summary>
/// File.WriteAllLines 方法用于将字符串数组的内容按行写入文本文件。
/// 每个数组元素都被写入文件的一行,且方法会自动在每行的末尾添加换行符。
/// </summary>
/// <param name="Logstring"></param>
/// <param name="pathAName"></param>
public static void WriteTXT(string pathAName,string []Logstring)
{
File.WriteAllLines(pathAName, Logstring);//写入文件
}
/// <summary>
/// 在最开始位置追加,追加到开头
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void AddTextFirst(string pathAName, string Logstring)
{
string s = File.ReadAllText(pathAName);
s = s.Insert(0, Logstring.Trim() + "\r\n");
File.WriteAllText(pathAName, s);
}
/// <summary>
/// 在最后位置追加
/// </summary>
/// <param name="pathAName"></param>
/// <param name="Logstring"></param>
public static void AddTextEnd(string pathAName, string Logstring)
{
StreamWriter sw = File.AppendText(pathAName);
sw.WriteLine(Logstring.Trim());
sw.Close();
}
#endregion
#region 读取文件
/// <summary>
/// 将文本文件读取到末尾
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string ReadTXT_StreamReader(string pathAName)
{
StreamReader ObjectName = new StreamReader(pathAName);
return ObjectName.ReadToEnd();
}
/// <summary>
/// 逐行读取文件,返回列表
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static List<string> ReadTXT_TextReader(string pathAName)
{
List<string> txtContent = new List<string>();
if (!File.Exists(pathAName))
{
using (TextReader reader = new StreamReader(pathAName))
{
string line;
while ((line = reader.ReadLine()) != null) // 逐行读取文件内容
{
txtContent.Add(line); // 输出每行内容到控制台
}
}
}
return txtContent;
}
/// <summary>
/// 逐行读取文件,返回数组
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string[] ReadTXT_ReadAllLines(string pathAName)
{
string[] txtContent = null;
txtContent = System.IO.File.ReadAllLines(pathAName, Encoding.UTF8);
return txtContent;
}
/// <summary>
/// 读取,返回字符串
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string ReadTXT_ReadAllText(string pathAName)
{
string txtContent = null;
txtContent = System.IO.File.ReadAllText(pathAName, Encoding.UTF8);
return txtContent;
}
/// <summary>
/// 读取,返回枚举类型
/// 高效地逐行读取大型文本文件的最佳方法
/// </summary>
/// <param name="pathAName"></param>
/// <returns></returns>
public static string ReadTXT_ReadLines(string pathAName)
{
IEnumerable<string> line = System.IO.File.ReadLines(pathAName, Encoding.UTF8);
return String.Join(Environment.NewLine, line);
}
#endregion
}
}