在用c#做项目时,尤其是配置文件时,会遇到各种文件的操作处理。所以,我将几种常见的文件操作处理方法整理了一下,如有问题,欢迎指正。
txt:
#region txt
/// <summary>
/// 创建一个空的txt
/// </summary>
/// <param name="FileName">路径文件名带后缀</param>
public void Create_txt(string FileName)
{
StreamWriter sw = new StreamWriter(FileName);
sw.Close();
}
/// <summary>
/// 写入txt
/// </summary>
/// <param name="FileName">路径文件名带后缀</param>
/// <param name="condition">true为追加写入,false为覆盖写入</param>
/// <param name="s">写入数据</param>
public void WriteData_txt(string FileName, bool condition, string s)
{
StreamWriter sw = new StreamWriter(FileName, condition);
sw.WriteLine(s);
sw.Close();
}
/// <summary>
/// 读取txt '_' ',' 为截取符
/// </summary>
/// <param name="FileName">路径文件名带后缀</param>
/// <param name="listbox">读取内容显示</param>
public void ReadData_txt(string FileName, ListBox listbox)
{
listbox.Items.Clear();
string ORead;
string[] splitstrings;
using (StreamReader sr = new StreamReader(FileName))
{
while (sr.Peek() >= 0)
{
ORead = sr.ReadLine();
//截取
char[] separator = { '_', ',' };
splitstrings = ORead.Split(separator);
for (int i = 0; i < splitstrings.Length; i++)
{
listbox.Items.Add(splitstrings[i] + '\n');
}
}
sr.Close();
}
}
#endregion
csv:
#region csv
/// <summary>
/// 创建一个空的csv文件
/// </summary>
/// <param name="path">路径</param>
/// <param name="filename">文件名带后缀</param>
public static void CreateCsv(string path, string filename)
{
if (File.Exists(Path.Combine(path, filename)))
{
MessageBox.Show("该文件已存在", "错误");
}
else
{
string s = path + filename;
StreamWriter sw = new StreamWriter(s);
//sw.WriteLine("");
sw.Close();
sw.Dispose();
MessageBox.Show("创建成功");
}
}
/// <summary>
/// 向csv文件中写入数据
/// </summary>
/// <param name="path">路径</param>
/// <param name="filename">文件名带后缀</param>
/// <param name="s">写入数据</param>
/// <param name="confdition">true为追加写入,false为覆盖写入</param>
public static void WriteCsv(string path, string filename, string s, bool confdition)
{
StreamWriter sw = new StreamWriter(path + filename, confdition);
//自动以','分隔开
sw.WriteLine(s);
sw.Close();
sw.Dispose();
}
#endregion
ini:
#region 写入ini
[DllImport("kernel32")]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
/// <summary>
/// 写入ini文档,若文件不存在则自动创建
/// </summary>
/// <param name="path">ini文档路径文件名带后缀</param>
/// <param name="section">片段</param>
/// <param name="key">关键字</param>
/// <param name="value">值</param>
public static void Write_ini(string path, string section, string key, string value)
{
if (string.IsNullOrEmpty(section) || string.IsNullOrEmpty(key) || string.IsNullOrEmpty(value))
{
MessageBox.Show("节点,键,值不能为空");
}
else
{
// section=配置节,key=键名,value=键值,path=路径
WritePrivateProfileString(section, key, value, path);
MessageBox.Show("写入成功");
}
}
/// <summary>
/// 删除ini文件指定的section
/// </summary>
/// <param name="filename">路径文件名加后缀</param>
/// <param name="section">删除section</param>
public static void Delete_section(string filename, string section)
{
WritePrivateProfileString(section, null, null, filename);
MessageBox.Show("删除成功");
}
/// <summary>
/// 删除ini文件指定section下的某个key
/// </summary>
/// <param name="path">路径文件名加后缀</param>
/// <param name="section">指定section</param>
/// <param name="key">所删除key</param>
public static void Delete_key(string path, string section, string key)
{
WritePrivateProfileString(section, key, null, path);
}
/// <summary>
/// 在ini文件中指定section下批量写入键、值
/// </summary>
/// <param name="path">路径文件名加后缀</param>
/// <param name="section">指定section</param>
/// <param name="keys">键集合</param>
/// <param name="values">值集合</param>
public static void WriteGroup_ini(string path, string section, string[] keys, string[] values)
{
if (keys.Length != values.Length)
{
MessageBox.Show("输入键与值个数不同");
}
else
{
for (int i = 0; i < keys.Length; i++)
{
WritePrivateProfileString(section, keys[i], values[i], path);
}
MessageBox.Show("写入成功");
}
}
#endregion
xml:
在处理xml文件时,应当注意xml文件的各级节点的名字的要求,xml文件的二级节点名不能以数字和特殊字符开头(’_'除外),文件名不能以特殊字符开头。
/// <summary>
/// 判断字符串是否以数字或者特殊字符开头 ,"_"除外
/// </summary>
/// <param name="s">输入字符串</param>
/// <returns>true为数字或者特殊字符开头,false则不是</returns>
public static bool IsCharBegin(string s)
{
if (char.IsDigit(s[0]))
return true;
else
{
if (s.StartsWith("_") || char.IsLetter(s[0]))
return false;
else
return true;
}
}
/// <summary>
/// 判断字符串是否以特殊字符开头
/// </summary>
/// <param name="s">输入字符串</param>
/// <returns>true为特殊字符开头</returns>
public static bool IsCNBegin(string s)
{
if (char.IsDigit(s[0]) || s.StartsWith("_") || char.IsLetter(s[0]))
return false;
else
return true;
}
/// <summary>
/// 创建一个空的xml文档
/// </summary>
/// <param name="FileName">路径文件名带后缀</param>
/// <param name="root">根节点名</param>
public static void CreateXML(string FileName, string root)
{
XmlDocument XDoc = new XmlDocument();
XmlDeclaration declaration = XDoc.CreateXmlDeclaration("1.0", "UTF-8", "yes");
XDoc.AppendChild(declaration);
XmlElement elem = XDoc.CreateElement(root);
XDoc.AppendChild(elem);
XDoc.Save(FileName);
}
/// <summary>
/// 读取显示整个xml文档
/// </summary>
/// <param name="FileName">路径文件名带后缀</param>
/// <param name="listBox">读取内容显示</param>
public static void ReadXml_All(string FileName, ListBox listBox)
{
listBox.Items.Clear();
listBox.Items.Add("文件名:");
listBox.Items.Add(FileName);
listBox.Items.Add(" ");
listBox.Items.Add("<?xml version=\"1.0\" encoding=\"UTF-8\"?> ");
XDocument doc = XDocument.Load(FileName);
XElement root = doc.Root;
listBox.Items.Add("<" + root.Name + ">");
IEnumerable<XElement> listnode = root.Elements();
foreach (XElement item in listnode)
{
listBox.Items.Add(" <" + item.Name + ">");
var nodes = item.Elements();
foreach (var noddd in nodes)
{
listBox.Items.Add(" " + noddd);
}
listBox.Items.Add(" </" + item.Name + ">");
}
listBox.Items.Add("</" + root.Name + ">");
}
/// <summary>
/// 删除整个xml文档
/// </summary>
/// <param name="FileName">路径文件名带后缀</param>
public static void RemoveXmlAll(string FileName)
{
if (!File.Exists(FileName))
{
MessageBox.Show("该路径下无此Xml文档", "删除失败");
}
else
{
File.Delete(FileName);
MessageBox.Show("删除成功");
}
}
以上为这些文件的常用基本操作的部分方法,如有问题或补充欢迎各位指正。
完整源码及dll文件:
链接:https://pan.baidu.com/s/1k0g9wZl_ZWbhqSv5jF9rcw 提取码:kp2o