一 、读取文本文件有多种方法
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
}
}
发表评论