俗話說,一個好漢十個幫人芽,眾人拾柴火焰高等都說明一個道理望几,有更多的資源,更豐富的積累萤厅,都是助你走向成功橄抹,走向頂峰的推動力。
繼續(xù)前面的隨筆系列惕味,介紹公用類庫的詳細使用楼誓,既上篇介紹了數(shù)據(jù)庫相關(guān)的操作內(nèi)容后,本篇主要介紹文件相關(guān)的處理輔助類名挥。本篇介紹的輔助類包括CSV操作輔助類疟羹,非VBA操作的Excel輔助類、常用文件操作輔助類、常用目錄操作輔助類阁猜、打開及保存文件對話框操作輔助類、INI文件操作輔助類蹋艺、監(jiān)視文件變化的類剃袍、獨立存儲操作輔助類等文件相關(guān)的輔助類。
**1捎谨、CSV文件和DataTable對象轉(zhuǎn)換輔助類 CSVHelper **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)CSV文件和DataTable對象的相互轉(zhuǎn)換民效。
2)逗號分隔型取值格式(英文全稱為Comma Separated Values,簡稱CSV)涛救,是一種純文本格式畏邢,用來存儲數(shù)據(jù)。在CSV中检吆,數(shù)據(jù)的字段由逗號分開舒萎,程序通過讀取文件重新創(chuàng)建正確的字段,方法是每次遇到逗號時開始新一段數(shù)據(jù)蹭沛。CSV除了可以用記事本等文本工具打開外臂寝,還可以用Excel打開,其效果和Excel很類似摊灭,因此二維表格數(shù)據(jù)一般也可以導(dǎo)出成CSV格式的文件咆贬。由于CSV文件可以使用Excel打開并操作,但導(dǎo)出CSV文件不需要客戶端安裝Excel軟件帚呼,因此非常方便易用掏缎。
實現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
/// <summary>
/// CSV轉(zhuǎn)換成DataTable(OleDb數(shù)據(jù)庫訪問方式)
/// </summary>
/// <param name="csvPath">csv文件路徑</param>
/// <returns></returns>
public static DataTable CSVToDataTableByOledb(string csvPath)
/// <summary>
/// CSV轉(zhuǎn)換成DataTable(文件流方式)
/// </summary>
/// <param name="csvPath">csv文件路徑</param>
/// <returns></returns>
public static DataTable CSVToDataTableByStreamReader(string csvPath)
/// <summary>
/// DataTable 生成 CSV
/// </summary>
/// <param name="dt">DataTable</param>
/// <param name="csvPath">csv文件路徑</param>
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];
//導(dǎo)出到CSV文件
string fileName = Path.Combine(Application.StartupPath, "customer.csv");
CSVHelper.DataTableToCSV(dt, fileName);
//從CSV文件導(dǎo)入到DataTable
DataTable dtNew = CSVHelper.CSVToDataTableByOledb(fileName);
this.dataGridView1.DataSource = dtNew.DefaultView;
2、 Excel操作輔助類(無需VBA引用) ExcelHelper
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)對Excel的相關(guān)操作煤杀,不需要調(diào)用Office的VBA相關(guān)類眷蜈。 該導(dǎo)出操作是基于XML文件和OleDB格式的,因此導(dǎo)出Excel文件不需要客戶端安裝Excel軟件沈自,因此非常方便易用端蛆。 2) 輔助類可以列出Excel的所有表、列出指定表的所有列酥泛、從Excel轉(zhuǎn)換為DataSet對象集合今豆、把DataSet轉(zhuǎn)換保存為Excel文件等操作。
實現(xiàn)代碼
1) 輔助類提供的方法接口如下所示:
#region 獲取Excel連接字符串
/// <summary>
/// 返回Excel 連接字符串 [IMEX=1]
/// </summary>
/// <param name="excelPath">Excel文件 絕對路徑</param>
/// <param name="header">是否把第一行作為列名</param>
/// <param name="eType">Excel 版本 </param>
/// <returns></returns>
public static string GetExcelConnectstring(string excelPath, bool header, ExcelType eType)
/// <summary>
/// 返回Excel 連接字符串
/// </summary>
/// <param name="excelPath">Excel文件 絕對路徑</param>
/// <param name="header">是否把第一行作為列名</param>
/// <param name="eType">Excel 版本 </param>
/// <param name="imex">IMEX模式</param>
/// <returns></returns>
public static string GetExcelConnectstring(string excelPath, bool header, ExcelType eType, IMEXType imex)
#endregion
#region 獲取Excel工作表名
/// <summary>
/// 返回Excel工作表名
/// </summary>
/// <param name="excelPath">Excel文件 絕對路徑</param>
/// <param name="eType">Excel 版本 </param>
/// <returns></returns>
public static List<string> GetExcelTablesName(string excelPath, ExcelType eType)
/// <summary>
/// 返回Excel工作表名
/// </summary>
/// <param name="connectstring">excel連接字符串</param>
/// <returns></returns>
public static List<string> GetExcelTablesName(string connectstring)
/// <summary>
/// 返回Excel工作表名
/// </summary>
/// <param name="connection">excel連接</param>
/// <returns></returns>
public static List<string> GetExcelTablesName(OleDbConnection connection)
/// <summary>
/// 返回Excel第一個工作表表名
/// </summary>
/// <param name="excelPath">Excel文件 絕對路徑</param>
/// <param name="eType">Excel 版本 </param>
/// <returns></returns>
public static string GetExcelFirstTableName(string excelPath, ExcelType eType)
/// <summary>
/// 返回Excel第一個工作表表名
/// </summary>
/// <param name="connectstring">excel連接字符串</param>
/// <returns></returns>
public static string GetExcelFirstTableName(string connectstring)
/// <summary>
/// 返回Excel第一個工作表表名
/// </summary>
/// <param name="connection">excel連接</param>
/// <returns></returns>
public static string GetExcelFirstTableName(OleDbConnection connection)
/// <summary>
/// 獲取Excel文件中指定工作表的列
/// </summary>
/// <param name="excelPath">Excel文件 絕對路徑</param>
/// <param name="table">名稱 excel table 例如:Sheet1$</param>
/// <returns></returns>
public static List<string> GetColumnsList(string excelPath, ExcelType eType, string table)
#endregion
#region EXCEL導(dǎo)入DataSet
/// <summary>
/// EXCEL導(dǎo)入DataSet
/// </summary>
/// <param name="excelPath">Excel文件 絕對路徑</param>
/// <param name="table">名稱 excel table 例如:Sheet1$ </param>
/// <param name="header">是否把第一行作為列名</param>
/// <param name="eType">Excel 版本 </param>
/// <returns>返回Excel相應(yīng)工作表中的數(shù)據(jù) DataSet [table不存在時返回空的DataSet]</returns>
public static DataSet ExcelToDataSet(string excelPath, string table, bool header, ExcelType eType)
/// <summary>
/// 判斷工作表名是否存在
/// </summary>
/// <param name="connection">excel連接</param>
/// <param name="table">名稱 excel table 例如:Sheet1$</param>
/// <returns></returns>
private static bool isExistExcelTableName(OleDbConnection connection, string table)
/// <summary>
/// EXCEL導(dǎo)入DataSet
/// </summary>
/// <param name="connectstring">excel連接字符串</param>
/// <param name="table">名稱 excel table 例如:Sheet1$ </param>
/// <returns>返回Excel相應(yīng)工作表中的數(shù)據(jù) DataSet [table不存在時返回空的DataSet]</returns>
public static DataSet ExcelToDataSet(string connectstring, string table)
/// <summary>
/// EXCEL所有工作表導(dǎo)入DataSet
/// </summary>
/// <param name="excelPath">Excel文件 絕對路徑</param>
/// <param name="header">是否把第一行作為列名</param>
/// <param name="eType">Excel 版本 </param>
/// <returns>返回Excel第一個工作表中的數(shù)據(jù) DataSet </returns>
public static DataSet ExcelToDataSet(string excelPath, bool header, ExcelType eType)
/// <summary>
/// EXCEL所有工作表導(dǎo)入DataSet
/// </summary>
/// <param name="connectstring">excel連接字符串</param>
/// <returns>返回Excel第一個工作表中的數(shù)據(jù) DataSet </returns>
public static DataSet ExcelToDataSet(string connectstring)
#endregion
/// <summary>
/// 把一個數(shù)據(jù)集中的數(shù)據(jù)導(dǎo)出到Excel文件中(XML格式操作)
/// </summary>
/// <param name="source">DataSet數(shù)據(jù)</param>
/// <param name="fileName">保存的Excel文件名</param>
public static void DataSetToExcel(DataSet source, string fileName)
/// <summary>
/// 將DataTable到處為Excel(OleDb 方式操作)
/// </summary>
/// <param name="dataTable">表</param>
/// <param name="fileName">導(dǎo)出默認文件名</param>
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<string> tableList = ExcelHelper.GetExcelTablesName(filePath, ExcelHelper.ExcelType.Excel2003);
//從Excel轉(zhuǎn)換為DataSet對象集合
DataSet ds = ExcelHelper.ExcelToDataSet(filePath, true, ExcelHelper.ExcelType.Excel2003);
//列出指定表的列名稱
List<string> columnList = ExcelHelper.GetColumnsList(filePath, ExcelHelper.ExcelType.Excel2003, "Sheet1$");
//綁定數(shù)據(jù)顯示
this.dataGridView1.DataSource = ds.Tables[0].DefaultView;
//導(dǎo)出DataSet到Excel文件中
filePath = FileDialogHelper.SaveExcel();
ExcelHelper.DataSetToExcel(ds, filePath);
Process.Start(filePath);
3柔袁、 常用文件操作輔助類 FileUtil
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)文件相關(guān)的操作呆躲,包括Stream、byte[] 和 文件之間的轉(zhuǎn)換捶索、獲取文件編碼插掂、獲取文件長度、創(chuàng)建文件、刪除文件辅甥、移動文件酝润、讀取文件、讀取文件屬性璃弄、設(shè)置文件屬性等功能要销。 2) 輔助類主要提供File、FileInfo夏块、FileStream疏咐、MemoryStream、Stream脐供、StreamReader浑塞、Encode等類的封裝,提供文件相關(guān)的操作功能政己。
實現(xiàn)代碼
1) 由于輔助類接口函數(shù)比較多酌壕,在此列出部分接口,輔助類提供的方法部分接口如下所示:
/// <summary>
/// 向文本文件中寫入內(nèi)容
/// </summary>
/// <param name="filePath">文件的絕對路徑</param>
/// <param name="content">寫入的內(nèi)容</param>
public static void WriteText(string filePath, string content)
/// <summary>
/// 向文本文件的尾部追加內(nèi)容
/// </summary>
/// <param name="filePath">文件的絕對路徑</param>
/// <param name="content">寫入的內(nèi)容</param>
public static void AppendText(string filePath, string content)
/// <summary>
/// 將源文件的內(nèi)容復(fù)制到目標文件中
/// </summary>
/// <param name="sourceFilePath">源文件的絕對路徑</param>
/// <param name="destFilePath">目標文件的絕對路徑</param>
public static void Copy(string sourceFilePath, string destFilePath)
/// <summary>
/// 將文件移動到指定目錄
/// </summary>
/// <param name="sourceFilePath">需要移動的源文件的絕對路徑</param>
/// <param name="descDirectoryPath">移動到的目錄的絕對路徑</param>
public static void Move(string sourceFilePath, string descDirectoryPath)
/// <summary>
/// 檢測指定文件是否存在,如果存在則返回true歇由。
/// </summary>
/// <param name="filePath">文件的絕對路徑</param>
public static bool IsExistFile(string filePath)
/// <summary>
/// 創(chuàng)建一個文件仅孩。
/// </summary>
/// <param name="filePath">文件的絕對路徑</param>
public static void CreateFile(string filePath)
/// <summary>
/// 創(chuàng)建一個文件,并將字節(jié)流寫入文件。
/// </summary>
/// <param name="filePath">文件的絕對路徑</param>
/// <param name="buffer">二進制流數(shù)據(jù)</param>
public static void CreateFile(string filePath, byte[] buffer)
#region XML文件操作
/// <summary>
/// 從XML文件轉(zhuǎn)換為Object對象類型.
/// </summary>
/// <param name="path">XML文件路徑</param>
/// <param name="type">Object對象類型</param>
/// <returns></returns>
public static object LoadObjectFromXml(string path, Type type)
/// <summary>
/// 保存對象到特定格式的XML文件
/// </summary>
/// <param name="path">XML文件路徑.</param>
/// <param name="obj">待保存的對象</param>
public static void SaveObjectToXml(string path, object obj)
#endregion
2)輔助類FileUtil的使用例子1代碼如下所示
string filePath = "C:\\Test.txt";
//創(chuàng)建一個文件并添加文本
FileUtil.AppendText(filePath, "測試內(nèi)容");
//獲取文件編碼
Encoding encode = FileUtil.GetEncoding(filePath);
string encodename = encode.EncodingName;
//讀取文件內(nèi)容
string content = FileUtil.FileToString(filePath);
//讀取文件到內(nèi)存流
Stream stream = FileUtil.FileToStream(filePath);
stream.Close();
//獲取文件創(chuàng)建時間
DateTime dtCreate =FileUtil.GetFileCreateTime(filePath);
//設(shè)置文件只讀
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<DatabaseSetting> list = new List<DatabaseSetting>(settingArray);
list.Add(setting);
settingArray = list.ToArray();
FileUtil.SaveObjectToXml(XmlPath, settingArray);
}
return settingArray;
}
4印蓖、 常用的目錄操作輔助類 DirectoryUtil
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)目錄操作的相關(guān)功能辽慕,包括目錄可寫與空間計算、獲取指定目錄中的文件列表赦肃、獲取指定目錄中的子目錄列表溅蛉、創(chuàng)建目錄、生成目錄他宛、檢測目錄等目錄操作功能船侧。 2) 輔助類主要提供Environment、Path厅各、Directory镜撩、DirectoryInfo等對象的封裝,提供目錄相關(guān)的操作队塘。
實現(xiàn)代碼
1) 輔助類提供的方法接口如下所示袁梗,由于接口函數(shù)較多,提供部分接口:
#region 目錄可寫與空間計算
/// <summary>
///檢查目錄是否可寫憔古,如果可以遮怜,返回True,否則False
/// </summary>
/// <param name="path"></param>
/// <returns></returns>
public static bool IsWriteable(string path)
/// <summary>
/// 檢查磁盤是否有足夠的可用空間
/// </summary>
/// <param name="path"></param>
/// <param name="requiredSpace"></param>
/// <returns></returns>
public static bool IsDiskSpaceEnough(string path, ulong requiredSpace)
/// <summary>
/// 獲取驅(qū)動盤符的可用空間大小
/// </summary>
/// <param name="driveName">Direve name</param>
/// <returns>free space (byte)</returns>
public static ulong GetFreeSpace(string driveName)
#endregion
#region 目錄操作
#region 獲取指定目錄中的文件列表
/// <summary>
/// 獲取指定目錄中所有文件列表
/// </summary>
/// <param name="directoryPath">指定目錄的絕對路徑</param>
public static string[] GetFileNames(string directoryPath)
/// <summary>
/// 獲取指定目錄及子目錄中所有文件列表
/// </summary>
/// <param name="directoryPath">指定目錄的絕對路徑</param>
/// <param name="searchPattern">模式字符串鸿市,"*"代表0或N個字符锯梁,"?"代表1個字符即碗。
/// 范例:"Log*.xml"表示搜索所有以Log開頭的Xml文件。</param>
/// <param name="isSearchChild">是否搜索子目錄</param>
public static string[] GetFileNames(string directoryPath, string searchPattern, bool isSearchChild)
#endregion
#region 獲取指定目錄中的子目錄列表
/// <summary>
/// 獲取指定目錄中所有子目錄列表,若要搜索嵌套的子目錄列表,請使用重載方法.
/// </summary>
/// <param name="directoryPath">指定目錄的絕對路徑</param>
public static string[] GetDirectories(string directoryPath)
/// <summary>
/// 獲取指定目錄及子目錄中所有子目錄列表
/// </summary>
/// <param name="directoryPath">指定目錄的絕對路徑</param>
/// <param name="searchPattern">模式字符串陌凳,"*"代表0或N個字符剥懒,"?"代表1個字符。
/// 范例:"Log*.xml"表示搜索所有以Log開頭的Xml文件合敦。</param>
/// <param name="isSearchChild">是否搜索子目錄</param>
public static string[] GetDirectories(string directoryPath, string searchPattern, bool isSearchChild)
#endregion
2)輔助類DirectoryUtil的使用例子代碼如下所示
string ticketFilePath = PCDataCollector_Config.Default.TickDataFilePath;
DirectoryUtil.AssertDirExist(ticketFilePath);
//對存在的票據(jù)數(shù)據(jù)進行處理
string[] ticketFiles = Directory.GetFiles(ticketFilePath);
foreach (string file in ticketFiles)
{
DealTicketFile(file);
}
5初橘、 打開、保存文件對話框操作輔助類 FileDialogHelper
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)打開蛤肌、保存文件對話框的操作壁却,如常用的圖片文件批狱、Excel文件裸准、Access文件、文本文件赔硫、壓縮文件炒俱、顏色等對話框的操作。 2) 該輔助類封裝了FolderBrowserDialog爪膊、OpenFileDialog权悟、SaveFileDialog、ColorDialog等對話框的常用對象的操作推盛,快速實現(xiàn)文件打開峦阁、保存等操作。
實現(xiàn)代碼
1) 由于提供各種打開對話框耘成,保存對話框等代碼類似榔昔,在此以文本文件對話框操作為例,輔助類提供的方法接口如下所示瘪菌,其他如Excel撒会、壓縮文件、圖片文件师妙、Access數(shù)據(jù)庫文件等類似操作诵肛,都提供了多種重載方法。
文件打開或者保存默穴,對應(yīng)不同的格式怔檩,如圖片,提供多種格式列表進行選擇等蓄诽。
private static string ExcelFilter = "Excel(*.xls)|*.xls|All File(*.*)|*.*";
private static string ImageFilter = "Image Files(*.BMP;*.bmp;*.JPG;*.jpg;*.GIF;*.gif;*.png)|(*.BMP;*.bmp;*.JPG;*.jpg;*.GIF;*.gif;*.png)|All File(*.*)|*.*";
private static string HtmlFilter = "HTML files (*.html;*.htm)|*.html;*.htm|All files (*.*)|*.*";
private static string AccessFilter = "Access(*.mdb)|*.mdb|All File(*.*)|*.*";
private static string ZipFillter = "Zip(*.zip)|*.zip|All files (*.*)|*.*";
private const string ConfigFilter = "配置文件(*.cfg)|*.cfg|All File(*.*)|*.*";
private static string TxtFilter = "(*.txt)|*.txt|All files (*.*)|*.*";
#region Txt相關(guān)對話框
/// <summary>
/// 打開Txt對話框
/// </summary>
/// <returns></returns>
public static string OpenText()
{
return Open("文本文件選擇", TxtFilter);
}
/// <summary>
/// 保存Excel對話框,并返回保存全路徑
/// </summary>
/// <returns></returns>
public static string SaveText()
{
return SaveText(string.Empty);
}
/// <summary>
/// 保存Excel對話框,并返回保存全路徑
/// </summary>
/// <returns></returns>
public static string SaveText(string filename)
{
return Save("保存文本文件", TxtFilter, filename);
}
/// <summary>
/// 保存Excel對話框,并返回保存全路徑
/// </summary>
/// <returns></returns>
public static string SaveText(string filename, string initialDirectory)
{
return Save("保存文本文件", TxtFilter, filename, initialDirectory);
}
#endregion
2)輔助類的使用例子代碼如下所示珠洗,示例彈出一個保存文件對話框,用戶選定保存Excel文件后若专,執(zhí)行數(shù)據(jù)導(dǎo)出操作许蓖。
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
實現(xiàn)效果
1)本輔助類主要是用來方便快捷獲取或設(shè)置INI文件的內(nèi)容。 2) 輔助類包括下面功能:寫INI文件膊爪、讀取INI文件自阱、刪除ini文件下所有段落、刪除ini文件下指定段落下的所有鍵等功能米酬。
INI文件格式如下所示
實現(xiàn)代碼
1) 輔助類提供的方法接口如下所示:
/// <summary>
/// 寫INI文件
/// </summary>
/// <param name="Section">分組節(jié)點</param>
/// <param name="Key">關(guān)鍵字</param>
/// <param name="Value">值</param>
public void IniWriteValue(string Section,string Key,string Value)
/// <summary>
/// 讀取INI文件
/// </summary>
/// <param name="Section">分組節(jié)點</param>
/// <param name="Key">關(guān)鍵字</param>
/// <returns></returns>
public string IniReadValue(string Section,string Key)
public byte[] IniReadValues(string section, string key)
/// <summary>
/// 刪除ini文件下所有段落
/// </summary>
public void ClearAllSection()
/// <summary>
/// 刪除ini文件下指定段落下的所有鍵
/// </summary>
/// <param name="Section"></param>
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');// 發(fā)送請求
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
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)對獨立存儲區(qū)域文件或者目錄的快速操作。 2) .NET引入了獨立存儲區(qū)概念赃额。獨立存儲區(qū)就像一個虛擬文件夾加派。用戶不需要知道文件存儲的確切的位置。你 所作的就是告訴.NET Framework在獨立存儲區(qū)存儲你的文件跳芳。對于不同的操作系統(tǒng)獨立存儲區(qū)的物理位置是不同的芍锦。在你的應(yīng)用程序中 簡單的使用.NET中的類創(chuàng)建和訪問文件,不需要擔(dān)心文件存儲的物理位置飞盆。
實現(xiàn)代碼
1) 輔助類提供的方法接口如下所示:
#region 程序運行時間的保存操作
/// <summary>
/// 加密并保存指定時間到"獨立存貯空間" (以分號(;)追加保存)
/// </summary>
public static void SaveDataTime()
/// <summary>
/// 加密并保存當(dāng)前時間到"獨立存貯空間" (以分號(;)追加保存)
/// </summary>
public static void SaveDataTime(DateTime fromDate)
/// <summary>
/// 從"獨立存貯空間"取程序第一次運行的時間并解密
/// </summary>
/// <returns></returns>
public static string GetDataTime()
#endregion
#region 基本操作函數(shù)
/// <summary>
/// 保存對象到獨立存儲區(qū)
/// </summary>
/// <param name="objectToSave">待保存的對象</param>
/// <param name="key">保存的鍵值</param>
public static void Save(object objectToSave, string key)
/// <summary>
/// 根據(jù)鍵值加載獨立存儲區(qū)的內(nèi)容
/// </summary>
/// <param name="key">獨立存儲的鍵值(路徑)</param>
/// <returns></returns>
public static object Load(string key)
/// <summary>
/// 加載存在用戶標識范圍娄琉、應(yīng)用程序范圍內(nèi)的存儲值
/// </summary>
/// <param name="d">待填充的字典對象</param>
/// <param name="filename">文件名</param>
public static void LoadFromUserStoreForApplication(IDictionary d, string filename)
/// <summary>
/// 保存在用戶標識范圍、應(yīng)用程序范圍內(nèi)的值
/// </summary>
/// <param name="d">待保存的字典對象</param>
/// <param name="filename">文件名</param>
public static void SaveToUserStoreForApplication(IDictionary d, string filename)
/// <summary>
/// 加載用戶范圍吓歇、應(yīng)用范圍孽水、程序集范圍內(nèi)的存儲值
/// </summary>
/// <param name="d">待填充的字典對象.</param>
/// <param name="filename">文件名</param>
public static void LoadFromUserStoreForDomain(IDictionary d, string filename)
/// <summary>
/// 保存用戶范圍、應(yīng)用范圍城看、程序集范圍內(nèi)的存儲值
/// </summary>
/// <param name="d">待保存的字典對象</param>
/// <param name="filename">文件名</param>
public static void SaveToUserStoreForDomain(IDictionary d, string filename)
/// <summary>
/// 加載在獨立存儲內(nèi)的指定文件內(nèi)容
/// </summary>
/// <param name="d">待填充的字典內(nèi)容</param>
/// <param name="scope">獨立存儲范圍對象</param>
/// <param name="filename">文件名</param>
public static void Load(IDictionary d, IsolatedStorageScope scope, string filename)
/// <summary>
/// 在獨立存儲范圍內(nèi)保存字典內(nèi)容到指定文件
/// </summary>
/// <param name="d">待保存的字典內(nèi)容</param>
/// <param name="scope">獨立存儲范圍對象</param>
/// <param name="filename">文件名</param>
public static void Save(IDictionary d, IsolatedStorageScope scope, string filename)
/// <summary>
/// 刪除指定區(qū)域的存儲區(qū)內(nèi)容
/// </summary>
/// <param name="fileName">待刪除的文件</param>
/// <param name="scope">獨立存儲范圍對象</param>
public static void Delete(string fileName, IsolatedStorageScope scope)
/// <summary>
/// 在存儲區(qū)內(nèi)創(chuàng)建目錄
/// </summary>
/// <param name="storage"></param>
/// <param name="dirName"></param>
public static void CreateDirectory(IsolatedStorageFile storage, string dirName)
/// <summary>
/// 在存儲區(qū)內(nèi)刪除目錄
/// </summary>
/// <param name="storage"></param>
/// <param name="dirName"></param>
public static void DeleteDirectory(IsolatedStorageFile storage, string dirName)
#endregion
2)輔助類的使用例子代碼如下所示女气。例子實現(xiàn)對用戶程序執(zhí)行時間的判斷,防止用戶擅自修改系統(tǒng)時間测柠。
/// <summary>
/// 檢查用戶的時間記錄是否正確
/// </summary>
/// <returns></returns>
public bool CheckTimeString()
{
/*
每次啟動紀錄一個時間date[0]...date[n].
第n+1次啟動時date[n+1].
if(date[n+1] <= date[n])
exit(-1);
if((date[n+1]-date[0])>30天)
exit(-2);
write date[n+1] to 紀錄
*/
string dateTimeString = IsolatedStorageHelper.GetDataTime();
string[] timeArray = dateTimeString.Split(new char[] { ';' });
DateTime lastestTime = System.DateTime.Now;
DateTime tempTime;
for (int i = 0; i < timeArray.Length; i++)
{
try
{
tempTime = Convert.ToDateTime(timeArray[i]);
}
catch
{
tempTime = System.DateTime.Now.AddMinutes(-1);//最古老的時間為當(dāng)前時間的一分鐘前
}
if (i == 0)
{
lastestTime = tempTime;
Portal.gc.FirstRunTime = lastestTime;
}
Portal.gc.TimeList.Add(tempTime);
}
//驗證時間的有效性
// 用戶調(diào)整了時間
// 用戶使用超過指定時間
DateTime newestTime = System.DateTime.Now;
if (newestTime < lastestTime)
{
MessageUtil.ShowWarning("對不起炼鞠,您在本軟件的試用期內(nèi)不可以修改系統(tǒng)日期。\r\n如果您想繼續(xù)使用本軟件鹃愤,請您恢復(fù)系統(tǒng)日期簇搅。謝謝合作");
return false;
}
TimeSpan span = new TimeSpan(newestTime.Ticks - lastestTime.Ticks);
if (span.Days > UIConstants.SoftwareProbationDay)
{
MessageUtil.ShowTips("您使用本軟件已經(jīng)過了試用期,如果您想繼續(xù)使用本軟件软吐,請您聯(lián)系我們瘩将。");
Portal.gc.DisableAllFunction = true;
return false;
}
IsolatedStorageHelper.SaveDataTime(); //記錄程序運行的時間
return true;
}
**8、監(jiān)視文件變化的類凹耙,包括創(chuàng)建姿现、修改、刪除等操作的輔助類 MyFileSystemWatcher **
實現(xiàn)效果
1)本輔助類主要是用來方便實現(xiàn)監(jiān)視文件或文件夾變化肖抱,包括創(chuàng)建备典、修改、重新命名意述、刪除等操作的提佣。
2) 本輔助類非常適合用于監(jiān)聽文件或者文件夾的變化吮蛹,然后做相應(yīng)的處理,如數(shù)據(jù)報送拌屏、日志記錄等操作潮针。示例的效果如下所示。
實現(xiàn)代碼
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) 實際項目中對文件監(jiān)控的處理例子倚喂。
private MyFileSystemWatcher watcherParking;
private MyFileSystemWatcher watcherTicket;
/// <summary>
/// 對指定目錄或者文件進行監(jiān)控
/// </summary>
public void StartFileWatcher()
{
FileInfo fileInfo = new FileInfo(PCDataCollector_Config.Default.ParkingFilePath);
string parkingFilePath = fileInfo.Directory.FullName;
DirectoryUtil.AssertDirExist(parkingFilePath);
string ticketFilePath = PCDataCollector_Config.Default.TickDataFilePath;
DirectoryUtil.AssertDirExist(ticketFilePath);
StopFileWatcher();//先取消后創(chuàng)建新的監(jiān)控
watcherParking = new MyFileSystemWatcher(parkingFilePath, "parking.ini");
watcherParking.Changed += new FileSystemEventHandler(watcherParking_Changed);
watcherParking.EnableRaisingEvents = true;
watcherTicket = new MyFileSystemWatcher(ticketFilePath, "*.ini");
watcherTicket.Created += new FileSystemEventHandler(watcherTicket_Created);
watcherTicket.EnableRaisingEvents = true;
//對存在的票據(jù)數(shù)據(jù)進行處理
string[] ticketFiles = Directory.GetFiles(ticketFilePath);
foreach (string file in ticketFiles)
{
DealTicketFile(file);
}
}
/// <summary>
/// 取消對文件的監(jiān)控
/// </summary>
public void StopFileWatcher()
{
if (watcherParking != null)
{
watcherParking.Dispose();
}
if (watcherTicket != null)
{
watcherTicket.Dispose();
}
}
private void DealTicketFile(string fileName)
{
Thread thread = new Thread(new ParameterizedThreadStart(DealTicketFileThread));
thread.IsBackground = true;
thread.Start(fileName);
}
感謝大家的支持和鼓勵每篷。
CHM幫助文檔持續(xù)更新中,統(tǒng)一下載地址是: http://www.iqidi.com/download/commonshelp.rar