继续前面的随笔系列,介绍公用类库的详细使用,既上篇介绍了数据库相关的操作内容后,本篇主要介绍文件相关的处理辅助类。本篇介绍的辅助类包括CSV操作辅助类,非VBA操作的Excel辅助类、常用文件操作辅助类、常用目录操作辅助类、打开及保存文件对话框操作辅助类、INI文件操作辅助类、监视文件变化的类、独立存储操作辅助类等文件相关的辅助类。
1、CSV文件和DataTable对象转换辅助类 CSVHelper
实现效果
1)本辅助类主要是用来方便实现CSV文件和DataTable对象的相互转换。2)逗号分隔型取值格式(英文全称为Comma Separated Values,简称CSV),是一种纯文本格式,用来存储数据。在CSV中,数据的字段由逗号分开,程序通过读取文件重新创建正确的字段,方法是每次遇到逗号时开始新一段数据。CSV除了可以用记事本等文本工具打开外,还可以用Excel打开,其效果和Excel很类似,因此二维表格数据一般也可以导出成CSV格式的文件。由于CSV文件可以使用Excel打开并操作,但导出CSV文件不需要客户端安装Excel软件,因此非常方便易用。
![厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)mfc类库详解](/Files/20117/3522d419-b8e9-4ad1-883d-85b0f00f672a.png)
实现代码
1)辅助类提供的方法接口如下所示:///
///
///
/// csv文件路径
public static void DataTableToCSV(DataTable dt, string csvPath)
2) 辅助类CSVHelper的使用例子代码如下所示
string access = @"C:\Orderwater.mdb"; OleDbHelper helper = new OleDbHelper(access); string sql = string.Format("Select * from All_Customer "); DataTable dt = helper.ExecuteDataSet(sql).Tables[0]; //导出到CSV文件 string fileName = Path.Combine(Application.StartupPath, "customer.csv"); CSVHelper.DataTableToCSV(dt, fileName); //从CSV文件导入到DataTable DataTable dtNew = CSVHelper.CSVToDataTableByOledb(fileName); this.dataGridView1.DataSource = dtNew.DefaultView;
2、 Excel操作辅助类(无需VBA引用) ExcelHelper
实现效果
1)本辅助类主要是用来方便实现对Excel的相关操作,不需要调用Office的VBA相关类。 该导出操作是基于XML文件和OleDB格式的,因此导出Excel文件不需要客户端安装Excel软件,因此非常方便易用。 2) 辅助类可以列出Excel的所有表、列出指定表的所有列、从Excel转换为DataSet对象集合、把DataSet转换保存为Excel文件等操作。实现代码
1) 辅助类提供的方法接口如下所示:#region 获取Excel连接字符串 ///
/// 是否把第一行作为列名
/// Excel 版本
///
/// 是否把第一行作为列名
/// Excel 版本
/// IMEX模式
///
/// Excel 版本
///
///
///
/// Excel 版本
///
///
///
/// 名称 excel table 例如:Sheet1$
///
/// 名称 excel table 例如:Sheet1$
/// 是否把第一行作为列名
/// Excel 版本
///
/// 名称 excel table 例如:Sheet1$
///
/// 名称 excel table 例如:Sheet1$
///
/// 是否把第一行作为列名
/// Excel 版本
///
///
/// 保存的Excel文件名
public static void DataSetToExcel(DataSet source, string fileName) ///
/// 导出默认文件名
public static void DataSetToExcel(DataTable dataTable, string fileName)
2)辅助类ExcelHeper的使用例子代码如下所示
string filePath = @"C:\test.xls";
//获取第一个表名 string sheetname = ExcelHelper.GetExcelFirstTableName(filePath, ExcelHelper.ExcelType.Excel2003);//Sheet1$ //列出所有表名称 List
3、 常用文件操作辅助类 FileUtil
实现效果
1)本辅助类主要是用来方便实现文件相关的操作,包括Stream、byte[] 和 文件之间的转换、获取文件编码、获取文件长度、创建文件、删除文件、移动文件、读取文件、读取文件属性、设置文件属性等功能。 2) 辅助类主要提供File、FileInfo、FileStream、MemoryStream、Stream、StreamReader、Encode等类的封装,提供文件相关的操作功能。实现代码
1) 由于辅助类接口函数比较多,在此列出部分接口,辅助类提供的方法部分接口如下所示:///
///
/// 写入的内容
public static void WriteText(string filePath, string content) ///
/// 写入的内容
public static void AppendText(string filePath, string content) ///
/// 目标文件的绝对路径
public static void Copy(string sourceFilePath, string destFilePath) ///
/// 移动到的目录的绝对路径
public static void Move(string sourceFilePath, string descDirectoryPath) ///
public static bool IsExistFile(string filePath) ///
public static void CreateFile(string filePath) ///
/// 二进制流数据
public static void CreateFile(string filePath, byte[] buffer) #region XML文件操作 ///
/// Object对象类型
///
/// 待保存的对象
public static void SaveObjectToXml(string path, object obj) #endregion
2)辅助类FileUtil的使用例子1代码如下所示
string filePath = "C:\\Test.txt"; //创建一个文件并添加文本 FileUtil.AppendText(filePath, "测试内容"); //获取文件编码 Encoding encode = FileUtil.GetEncoding(filePath); string encodename = encode.EncodingName; //读取文件内容 string content = FileUtil.FileToString(filePath); //读取文件到内存流 Stream stream = FileUtil.FileToStream(filePath); stream.Close(); //获取文件创建时间 DateTime dtCreate =FileUtil.GetFileCreateTime(filePath); //设置文件只读 FileUtil.SetFileReadonly(filePath, true);
例子2如下代码所示
public static DatabaseSetting[] ReadSettings() { if (!File.Exists(XmlPath)) { throw new FileNotFoundException("File not found: DatabaseSetting.xml"); } DatabaseSetting[] settings = FileUtil.LoadObjectFromXml(XmlPath, typeof(DatabaseSetting[])) as DatabaseSetting[]; return settings; } public static bool Save(DatabaseSetting[] settings) { bool breturn = false; if (settings != null) { FileUtil.SaveObjectToXml(XmlPath, settings); breturn = true; } return breturn; } public static DatabaseSetting[] Add(DatabaseSetting setting) { DatabaseSetting[] settingArray = ReadSettings(); if (setting != null) { List
}
4、 常用的目录操作辅助类 DirectoryUtil
实现效果
1)本辅助类主要是用来方便实现目录操作的相关功能,包括目录可写与空间计算、获取指定目录中的文件列表、获取指定目录中的子目录列表、创建目录、生成目录、检测目录等目录操作功能。 2) 辅助类主要提供Environment、Path、Directory、DirectoryInfo等对象的封装,提供目录相关的操作。实现代码
1) 辅助类提供的方法接口如下所示,由于接口函数较多,提供部分接口:#region 目录可写与空间计算 ///
///
///
///
///
public static string[] GetFileNames(string directoryPath) ///
/// 模式字符串,"*"代表0或N个字符,"?"代表1个字符。 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。
/// 是否搜索子目录
public static string[] GetFileNames(string directoryPath, string searchPattern, bool isSearchChild) #endregion #region 获取指定目录中的子目录列表 ///
public static string[] GetDirectories(string directoryPath) ///
/// 模式字符串,"*"代表0或N个字符,"?"代表1个字符。 /// 范例:"Log*.xml"表示搜索所有以Log开头的Xml文件。
/// 是否搜索子目录
public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild)
#endregion
2)辅助类DirectoryUtil的使用例子代码如下所示
string ticketFilePath = PCDataCollector_Config.Default.TickDataFilePath; DirectoryUtil.AssertDirExist(ticketFilePath); //对存在的票据数据进行处理 string[] ticketFiles = Directory.GetFiles(ticketFilePath); foreach (string file in ticketFiles) { DealTicketFile(file); }
5、 打开、保存文件对话框操作辅助类 FileDialogHelper
实现效果
1)本辅助类主要是用来方便实现打开、保存文件对话框的操作,如常用的图片文件、Excel文件、Access文件、文本文件、压缩文件、颜色等对话框的操作。 2) 该辅助类封装了FolderBrowserDialog、OpenFileDialog、SaveFileDialog、ColorDialog等对话框的常用对象的操作,快速实现文件打开、保存等操作。实现代码
1) 由于提供各种打开对话框,保存对话框等代码类似,在此以文本文件对话框操作为例,辅助类提供的方法接口如下所示,其他如Excel、压缩文件、图片文件、Access数据库文件等类似操作,都提供了多种重载方法。#region Txt相关对话框 ///
2)辅助类的使用例子代码如下所示,示例弹出一个保存文件对话框,用户选定保存Excel文件后,执行数据导出操作。 private void menuExcel_Click(object sender, EventArgs e) { string savePath = FileDialogHelper.SaveExcel(); if (!string.IsNullOrEmpty(savePath)) { string outError = ""; AsposeExcelTools.DataTableToExcel(dtSource, savePath, out outError); if (!string.IsNullOrEmpty(outError)) { MessageBox.Show(outError); } else { Process.Start(savePath); } } }
例子2代码如下所示
private void btnImportContent_Click(object sender, EventArgs e) { string fileName = FileDialogHelper.OpenText(); if (!string.IsNullOrEmpty(fileName)) { ThreadPool.QueueUserWorkItem(new WaitCallback(ImportContentData), fileName); } }
6、 INI文件操作辅助类 INIFileUtil
实现效果
1)本辅助类主要是用来方便快捷获取或设置INI文件的内容。 2) 辅助类包括下面功能:写INI文件、读取INI文件、删除ini文件下所有段落、删除ini文件下指定段落下的所有键等功能。INI文件格式如下所示
![厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)mfc类库详解](/Files/20117/77c6e1af-5372-4c33-b111-654d5efe6201.png)
实现代码
1) 辅助类提供的方法接口如下所示:///
/// 关键字
/// 值
public void IniWriteValue(string Section,string Key,string Value) ///
/// 关键字
///
public void ClearSection(string Section)
2)辅助类INIFileUtil的使用例子代码如下所示
private void DetalParkingThread(object objFileName) { string fileName = objFileName.ToString(); try { INIFileUtil iniFile = new INIFileUtil(fileName); string parking_no = iniFile.IniReadValue("Parking", "parking_no").Trim(); string max_cars = iniFile.IniReadValue("Parking", "max_cars").Trim(); string space = iniFile.IniReadValue("Parking", "space").Trim(); string in_no = iniFile.IniReadValue("Parking", "in_no").Trim(); string out_no = iniFile.IniReadValue("Parking", "out_no").Trim(); string in_month_no = iniFile.IniReadValue("Parking", "in_month_no").Trim(); string out_month_no = iniFile.IniReadValue("Parking", "out_month_no").Trim(); string in_temp_no = iniFile.IniReadValue("Parking", "in_temp_no").Trim(); string out_temp_no = iniFile.IniReadValue("Parking", "out_temp_no").Trim(); string update_time = iniFile.IniReadValue("Parking", "update_time").Trim(); string seqNo = DateTime.Now.ToString("yyyyMMdd") + new Random().Next(99999).ToString().PadLeft(5, '0');// 发送请求 PCParkingInfoUpload data = new PCParkingInfoUpload(seqNo, parking_no, Convert.ToInt32(max_cars), Convert.ToInt32(space), Convert.ToInt32(in_no), Convert.ToInt32(out_no), Convert.ToInt32(in_month_no), Convert.ToInt32(out_month_no), Convert.ToInt32(in_temp_no), Convert.ToInt32(out_temp_no), Convert.ToDateTime(update_time)); CommonManager.Instance.Send(data.ToString()); // 记录请求 ReqAnsManager.Instance.Add(new RequestRecord(DataTypeKey.PCParkingInfoUpload, seqNo, DateTime.Now.AddSeconds(10), fileName, null)); } catch(Exception ex) { Log.WriteError(string.Format("{0} INI文件格式错误:{1}", objFileName, ex.Message)); } }
7、 独立存储操作辅助类 IsolatedStorageHelper
实现效果
1)本辅助类主要是用来方便实现对独立存储区域文件或者目录的快速操作。 2) .NET引入了独立存储区概念。独立存储区就像一个虚拟文件夹。用户不需要知道文件存储的确切的位置。你 所作的就是告诉.NET Framework在独立存储区存储你的文件。对于不同的操作系统独立存储区的物理位置是不同的。在你的应用程序中 简单的使用.NET中的类创建和访问文件,不需要担心文件存储的物理位置。实现代码
1) 辅助类提供的方法接口如下所示:#region 程序运行时间的保存操作 ///
/// 保存的键值
public static void Save(object objectToSave, string key) ///
///
/// 文件名
public static void LoadFromUserStoreForApplication(IDictionary d, string filename) ///
/// 文件名
public static void SaveToUserStoreForApplication(IDictionary d, string filename) ///
/// 文件名
public static void LoadFromUserStoreForDomain(IDictionary d, string filename) ///
/// 文件名
public static void SaveToUserStoreForDomain(IDictionary d, string filename) ///
/// 独立存储范围对象
/// 文件名
public static void Load(IDictionary d, IsolatedStorageScope scope, string filename) ///
/// 独立存储范围对象
/// 文件名
public static void Save(IDictionary d, IsolatedStorageScope scope, string filename) ///
/// 独立存储范围对象
public static void Delete(string fileName, IsolatedStorageScope scope) ///
///
public static void CreateDirectory(IsolatedStorageFile storage, string dirName) ///
///
public static void DeleteDirectory(IsolatedStorageFile storage, string dirName)
#endregion
2)辅助类的使用例子代码如下所示。例子实现对用户程序执行时间的判断,防止用户擅自修改系统时间。
///
}
8、监视文件变化的类,包括创建、修改、删除等操作的辅助类 MyFileSystemWatcher
实现效果
1)本辅助类主要是用来方便实现监视文件或文件夹变化,包括创建、修改、重新命名、删除等操作的。
2) 本辅助类非常适合用于监听文件或者文件夹的变化,然后做相应的处理,如数据报送、日志记录等操作。示例的效果如下所示。
![厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)mfc类库详解](/Files/20117/2d7fbedc-ab0a-425f-abd6-bd50c1e214a9.png)
实现代码
1)辅助类的使用例子代码如下所示
static void Main(string[] args) { MyFileSystemWatcher fsw = new MyFileSystemWatcher(@"D:\Test"); fsw.Created += new System.IO.FileSystemEventHandler(fsw_Created); fsw.Changed += new System.IO.FileSystemEventHandler(fsw_Changed); fsw.Deleted += new System.IO.FileSystemEventHandler(fsw_Deleted); fsw.Renamed += new System.IO.RenamedEventHandler(fsw_Renamed); fsw.EnableRaisingEvents = true; Console.ReadLine(); } static void fsw_Renamed(object sender, System.IO.RenamedEventArgs e) { Console.WriteLine("Renamed: FileName - {0}, ChangeType - {1}, Old FileName - {2}", e.Name, e.ChangeType, e.OldName); } static void fsw_Deleted(object sender, System.IO.FileSystemEventArgs e) { Console.WriteLine("Deleted: FileName - {0}, ChangeType - {1}", e.Name, e.ChangeType); } static void fsw_Changed(object sender, System.IO.FileSystemEventArgs e) { Console.WriteLine("Changed: FileName - {0}, ChangeType - {1}", e.Name, e.ChangeType); } static void fsw_Created(object sender, System.IO.FileSystemEventArgs e) { Console.WriteLine("Created: FileName - {0}, ChangeType - {1}", e.Name, e.ChangeType); }
2) 实际项目中对文件监控的处理例子。
private MyFileSystemWatcher watcherParking; private MyFileSystemWatcher watcherTicket; ///
感谢大家的支持和鼓励。
CHM帮助文档持续更新中,统一下载地址是: http://www.iqidi.com/download/commonshelp.rar
系列文章列表如下:
最新评论