一、利用字节流与文件流读写txt、json文件
1.以文件的方式进行操作
适用于小型文本全文的读取和写入。
首先创建C#窗体程序,然后写入以下代码:
string filePath = @"D:\Test_C#\TestTxt.txt";
// 1、文件操作类(File)
void FileDo()
{
string ret = "";
#region 读取
{
//File.ReadAllBytes打开一个二进制文件,将文件的内容读入一个字节数组,然后关闭该文件。因为可以读取到每个字节 所以可以处理所有类型的文件
byte[] buffer1 = File.ReadAllBytes(filePath);
//File.ReadAllText 打开一个文本文件,将文件中的所有文本读取到一个字符串中,然后关闭此文件。
string alltxt = File.ReadAllText(filePath);
string[] lines = File.ReadAllLines(filePath);
ret = Encoding.UTF8.GetString(buffer1);
Console.WriteLine(ret);
}
#endregion
#region 写入
{
//覆盖式写入
byte[] buffer2 = Encoding.UTF8.GetBytes(ret+"\n黄河入海流");
//File.WriteAllBytes创建一个新文件,在其中写入指定的字节数组,然后关闭该文件。 如果目标文件已存在,则覆盖该文件。
File.WriteAllBytes(filePath, buffer2);
//File.WriteAllText 创建一个新文件,向其中写入内容,然后关闭文件。 如果目标文件已存在,则覆盖该文件。
File.WriteAllText(filePath2, ret);
}
#endregion
}
2.以文件流的方式进行读写
void FileStreamDo()
{
#region 读取
byte[] buffer;
//方式1
//1.FileStream文件流——这个类主要用于在二进制文件中读写二进制数据。
//FileStream类操作字节和字节数组,有些操作比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行。
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
}
//2.StreamReader(流读取器)和StreamWriter(流写入器)这两个类专门用于文本格式的流产品API
//3.BinaryReader和BinaryWriter这两个类专门用于读写二进制格式的流产品API.
//方式2
//using (FileStream fs = File.OpenRead(filePath))
//{
// buffer = new byte[fs.Length];
// fs.Read(buffer, 0, buffer.Length);
//}
#endregion
//读取1中文件流,写入2中
#region 写入
using (FileStream fs = new FileStream(filePath2, FileMode.Create))
{
buffer = Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(buffer)+"\n欲穷千里目");
fs.Write(buffer, 0, buffer.Length);
fs.Close();
}
#endregion
}
3.以二进制数据流的方式进行读写
void BinaryDo()
{
#region 读取
byte[] buffer;
//方式1
//Stream类操作字符数据。字符数据易于使用
using (Stream stream = File.Open(filePath2, FileMode.Open))
{
using (BinaryReader reader = new BinaryReader(stream))
{
buffer = reader.ReadBytes((int)stream.Length); //将流读入到字节数组中
}
}
#endregion
#region 写入
using (Stream stream = File.Open(filePath3, FileMode.Create))
{
using (BinaryWriter writer = new BinaryWriter(stream))
{
writer.Write(Encoding.UTF8.GetBytes(Encoding.UTF8.GetString(buffer) + "\n更上一层楼"));
}
}
#endregion
}
4.以文本流的方式进行读写
void StreamDo()
{
string text = "";
#region 读取
using (StreamReader reader = new StreamReader(filePath3))
{
text = reader.ReadToEnd();
Console.WriteLine(text);
}
#endregion
#region 写入
using (FileStream fs = new FileStream(filePath4, FileMode.Create))
{
using (StreamWriter writer = new StreamWriter(fs))
{
writer.Write(text+"\nThis is tuesday!");
}
}
#endregion
}
5.JOSN文件的读写
首先安装依赖包
Install - Package Newtonsoft.Json
config.json内容如下:
{
"server": "1.1.1.1",
"user": "sa",
"passwd": "1"
}
代码块入下:
void Get_Json()
{
try
{
StreamReader reader = File.OpenText(filePath5);
JsonTextReader jsonTextReader = new JsonTextReader(reader);
JObject jsonObject = (JObject)JToken.ReadFrom(jsonTextReader);
string server = jsonObject["server"].ToString(); //user ,passwd 类似
reader.Close();
Console.WriteLine(server);
}
catch (Exception ex)
{
Console.WriteLine("读取错误" + ex);
}
}
void Set_Json(string server)
{
try
{
StreamReader reader = File.OpenText(filePath5);
JsonTextReader jsonTextReader = new JsonTextReader(reader);
JObject jsonObject = (JObject)JToken.ReadFrom(jsonTextReader);
jsonObject["server"] = server;
reader.Close();
string output = JsonConvert.SerializeObject(jsonObject, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText(filePath5, output);
}
catch(Exception ex)
{
Console.WriteLine("写入错误"+ex);
}
}
//Set_server("1.1.1.2");
//Get_server();
二、kernel32读写ini文件
创建.ini文件,内容如下:
(注意文件编码格式使用ANSI,否则读取会出现乱码)
[Information]
Name=醒醒
Gender=男
Age=35
Region=广东
然后写入以下代码块:
string filePath6 = @"D:\Test_C#\temp.ini";
/// 获取值
/// <param name="section">段落名</param>
/// <param name="key">键名</param>
/// <param name="defval">读取异常是的缺省值</param>
/// <param name="retval">键名所对应的的值,没有找到返回空值</param>
/// <param name="size">返回值允许的大小</param>
/// <param name="filepath">ini文件的完整路径</param>
[DllImport("kernel32.dll")]
static extern int GetPrivateProfileString(
string section,
string key,
string defval,
StringBuilder retval,
int size,
string filepath);
// 写入
[DllImport("kernel32.dll")]
static extern int WritePrivateProfileString(
string section,
string key,
string val,
string filepath);
// 获取数据
static string getString(string section, string key, string def, string filename)
{
StringBuilder sb = new StringBuilder(1024);
GetPrivateProfileString(section, key, def, sb, 1024, filename);
return sb.ToString();
}
// 写入数据
static void writeString(string section, string key, string val, string filename)
{
WritePrivateProfileString(section, key, val, filename);
}
//调用上述方法
void IniDO()
{
string names = getString("Information", "Name", null, filePath6);
string gender = getString("Information", "Gender", null, filePath6);
string age = getString("Information", "Age", null, filePath6);
string region = getString("Information", "Region", null, filePath6);
Console.WriteLine("名称:"+names+"\n性别:"+ gender + "\n年龄:"+ age + "\n籍贯:" + region);
}
//IniDO();
三、XML文件的读写
1.DataSet读取操作
创建两个.xml文件,内容如下:
不带ID的文件
<?xml version="1.0" encoding="utf-8" ?>
<studentList>
<student>
<name>张三</name>
<sex>男</sex>
<old>20</old>
</student>
<student>
<name>李四</name>
<sex>女</sex>
<old>21</old>
</student>
</studentList>
带ID的文件
<?xml version="1.0" encoding="utf-8" ?>
<studentList>
<student Type="Bad" ISBN="541801">
<name id="1">张三</name>
<sex id="11">男</sex>
<old id="111">20</old>
</student>
<student Type="Good" ISBN="541802">
<name id="2">李四</name>
<sex id="22">女</sex>
<old id="222">21</old>
</student>
</studentList>
C#代码块如下:
void DataSet_ReadXml()
{
//dataset读取简单xml文件
DataSet ds = new DataSet();
ds.ReadXml(filePath7);
//读取第一条数据的name节点
string name = ds.Tables[0].Rows[0]["name"].ToString();
//输出:张三
Console.WriteLine(name);
}
void DataSet_ReadXml_id()
{
//dataset读取带属性的xml文件
DataSet ds = new DataSet();
ds.ReadXml(filePath8);
//读取的节点名称
string nodeName = "name";
string name = "";
name = ds.Tables[nodeName].Rows[0][nodeName + "_Text"].ToString();
//读取节点的id属性
string id = ds.Tables[nodeName].Rows[0]["id"].ToString();
//输出:id:1,name:张三
Console.WriteLine("id:{0},name:{1}", id, name);
}
//DataSet_ReadXml();
//DataSet_ReadXml_id();
2.使用Json.Net转换读取
void XmlToJson()
{
//XmlDocument读取xml文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath8);
//转换为json
string json = JsonConvert.SerializeXmlNode(xmlDoc);
//解析json
JObject jobj = JObject.Parse(json);
JArray jarr = JArray.Parse(jobj["studentList"]["student"].ToString());
//输出:id:1,name:张三
Console.WriteLine("id:{0},name:{1}", jarr[0]["name"]["#text"], jarr[0]["name"]["@id"]);
}
//XmlToJson();
3.使用XmlDocument读取
void XmlDocument_Load()
{
//XmlDocument读取xml文件
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filePath8);
//获取xml根节点
XmlNode xmlRoot = xmlDoc.DocumentElement;
//根据节点顺序逐步读取
//读取第一个name节点
string name = xmlRoot.SelectSingleNode("student/name").InnerText;
//读取节点的id属性
string id = xmlRoot.SelectSingleNode("student/name").Attributes["id"].InnerText;
//输出:id:1,name:张三
Console.WriteLine("id:{0},name:{1}", id, name);
//读取所有的name节点
foreach (XmlNode node in xmlRoot.SelectNodes("student/name"))
{
//循环输出
Console.WriteLine("id:{0},name:{1}", node.Attributes["id"].InnerText, node.InnerText);
}
}
//XmlDocument_Load();
void XmlDocument_Load2()
{
//使用的时候,首先声明一个XmlDocument对象,然后调用Load方法,从指定的路径加载XML文件.
XmlDocument doc = new XmlDocument();
XmlReaderSettings settings = new XmlReaderSettings();
settings.IgnoreComments = true;//忽略文档里面的注释
using (XmlReader reader = XmlReader.Create(filePath8, settings))
{
doc.Load(reader);
//doc.Load(@"d:/demo.xml");
//然后可以通过调用SelectSingleNode得到指定的结点,通过GetAttribute得到具体的属性值.参看下面的代码
// 得到根节点bookstore
XmlNode xn = doc.SelectSingleNode("studentList");
// 得到根节点的所有子节点
XmlNodeList xnl = xn.ChildNodes;
string info = "\n";
string info2 = "\n";
foreach (XmlNode xn1 in xnl)
{
// 将节点转换为元素,便于得到节点的属性值
XmlElement xe = (XmlElement)xn1;
// 得到<student>标签的Type和ISBN两个属性的属性值
info += "TYPE:" + xe.GetAttribute("Type").ToString();
info += " ISBN:" + xe.GetAttribute("ISBN").ToString() + "\n";
// 得到Book节点的所有子节点
XmlNodeList xnl0 = xe.ChildNodes;
info2 += "name:" + xnl0.Item(0).InnerText;
info2 += " sex:" + xnl0.Item(1).InnerText;
info2 += " old:" + xnl0.Item(2).InnerText + "\n";
}
Console.WriteLine(info+info2);
}
}
//XmlDocument_Load2();
4.使用XmlTextReader读取
#region XmlTextReaderDemo
void XmlTextReaderDemo()
{
string info = "\n";
string info2 = "\n";
XmlTextReader reader = new XmlTextReader(filePath8);
while (reader.Read())
{
if (reader.NodeType == XmlNodeType.Element)
{
if (reader.Name == "student")
{
info += "TYPE:" + reader.GetAttribute("Type");
info += " ISBN:" + reader.GetAttribute("ISBN") + "\n";
}
if (reader.Name == "name")
{
info2 += "name:" + reader.ReadElementContentAsString();
}
if (reader.Name == "sex")
{
info2 += " sex:" + reader.ReadElementString().Trim();
}
if (reader.Name == "old")
{
info2 += " old:" + reader.ReadElementString().Trim() + "\n";
}
//for(int i=0;i<reader.AttributeCount;i++)
//{
// reader.MoveToAttribute(i);
//}
}
}
reader.Close();
Console.WriteLine(info + info2);
}
#endregion XmlTextReaderDemo
//XmlTextReaderDemo();
5.使用 Linq to Xml读取
void Linq_To_Xml()
{
XElement xe = XElement.Load(filePath8);
//xe.Descendants
var elements = from ele in xe.Elements()
select ele;
string info = "";
foreach (var ele in elements)
{
info += "name:" + ele.Element("name").Value;
info += " old:" + ele.Element("old").Value + "\n";
}
Console.WriteLine(info);
}
//Linq_To_Xml();
四、EXCEL文件的读写
参考文章:EXCEL的读取方式
1.以NPOI的方式读写
//NPOI方式
//优点:用户电脑上没有安装office,使用NPOI,依旧可以在它的机器上对word或者excel文档进行读写
//缺点:有的需要下载插件,添加到系统引用中。
//如果需要读写多种Word、Excel等Office文件,OpenXml和NPOI也是不错的选择。
//using NPOI.SS.UserModel;
void Excle_NPOI()
{
//导入
IWorkbook workbook = WorkbookFactory.Create(filePath12);
ISheet sheet = workbook.GetSheetAt(0);//获取第一个工作薄
sheet.CreateRow(0).CreateCell(0).SetCellValue("A");
//向第一行第一个单元格写入字符串
sheet.CreateRow(1).CreateCell(1).SetCellValue(2);
sheet.CreateRow(2).CreateCell(2).SetCellValue("B");
IRow row = (IRow)sheet.GetRow(0);//获取第一行
//设置第一行第一列值,更多方法请参考源官方Demo
row.CreateCell(4).SetCellValue("Excle_NPOI");//设置第一行第一列值
//导出excel
FileStream fs = new FileStream(filePath12, FileMode.Create, FileAccess.ReadWrite);
workbook.Write(fs);
fs.Close();
}
Excle_NPOI();
2.以ClosedXML的方式读写
添加相应的NuGet包
//using ClosedXML.Excel;
void Excle_ClosedXml()
{
var workbook = new XLWorkbook(filePath11);
IXLWorksheet sheet = workbook.Worksheet(1);//这个库也是从1开始
//设置第一行第一列值,更多方法请参考官方Demo
sheet.Cell(1, 5).Value = "Excle_ClosedXml";//该方法也是从1开始,非0
workbook.SaveAs(filePath12);
}
//Excle_ClosedXml();
//导出不支持覆盖,如果路径12的文件存在则报错?
3.以Spire.Xls的方式读写
//如果需要在WinForm中展示,那么Spire.Office可能是唯一选择。
//Nuget下载Free Spire.xls
void Excle_spire()
{
Spire.Xls.Workbook workbook = new Spire.Xls.Workbook();
workbook.LoadFromFile(filePath11);
//处理Excel数据,更多请参考官方Demo
Spire.Xls.Worksheet sheet = workbook.Worksheets[0];
sheet.Range[1, 6].Text = "Excle_spire";//该方法也是从1开始,非0
workbook.SaveToFile(filePath12);
}
//Excle_spire();
//覆盖式导出
4.以EPPlus的方式读写
//如果只是需要读写Excel,那么EPPlus非常方便而且符合使用习惯。
//using OfficeOpenXml;
void TestEPPlus()
{
ExcelPackage.LicenseContext = LicenseContext.NonCommercial;//指明非商业应用;EPPlus通过LicenseContext来区分商业应用(Commercial)和非商业应用(NonCommercial)
ExcelPackage package = new ExcelPackage(filePath12);//加载Excel工作簿
ExcelWorksheet sheet1 = package.Workbook.Worksheets["Sheet1"];//读取工作簿中名为"Sheet1"的工作表
sheet1.Cells[1, 1].Value = "A";//设置单元格内容
sheet1.Cells[2, 2].Value = "B";
sheet1.Cells[3, 3].Value = "C";
//package.Save();//将更改保存到原文件
package.SaveAs(filePath12);//将更改保存到新的文件,类似于另存为
}
//TestEPPlus();
五、CSV文件的读取
参考博客:CSV文件的读取方式
DataTable CSV2DataTable(string fileName)
{
try
{
DataTable dt = new DataTable();
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.Default);
//记录每次读取的一行记录
string strLine = "";
//记录每行记录中的各字段内容
string[] aryLine;
//标示列数
int columnCount = 0;
//标示是否是读取的第一行
bool IsFirst = true;
//逐行读取CSV中的数据
while ((strLine = sr.ReadLine()) != null)
{
aryLine = strLine.Replace('"', ' ').Replace(" ", "").TrimEnd(',').Split(',');
if (IsFirst == true)
{
IsFirst = false;
columnCount = aryLine.Length;
//创建列
for (int i = 0; i < columnCount; i++)
{
DataColumn dc = new DataColumn(aryLine[i]);
try
{
dt.Columns.Add(dc);
}
catch (Exception ex)
{
return null;
}
}
}
else
{
DataRow dr = dt.NewRow();
for (int j = 0; j < columnCount; j++)
{
dr[j] = aryLine[j];
}
dt.Rows.Add(dr);
}
}
sr.Close();
fs.Close();
return dt;
}
catch (Exception)
{
return null;
}
}
//仅能读取简单的CSV
//DataTable dt = CSV2DataTable(filePath9);
//for (int i = 0; dt.Rows.Count<i; i++)
//{
// Console.Write("");
//}
simple.csv文件示例文章来源:https://www.toymoban.com/news/detail-413171.html
Test1,Test2,Test3,Test4,Test5,Test6
s1,s2,s3,s4,s5,s6
r1,r2,r3,r4,r5,r6
以上便是本文的所有内容啦,如有遗漏,欢迎补充!文章来源地址https://www.toymoban.com/news/detail-413171.html
到了这里,关于C#读写各类文件合集的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!