厚積薄發(fā)欠动,豐富的公用類庫積累永乌,助你高效進行系統(tǒng)開發(fā)(4)----CSV、Excel具伍、INI文件翅雏、獨立存儲等文件相關(guān)

俗話說,一個好漢十個幫人芽,眾人拾柴火焰高等都說明一個道理望几,有更多的資源,更豐富的積累萤厅,都是助你走向成功橄抹,走向頂峰的推動力。
繼續(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末端圈,一起剝皮案震驚了整個濱河市焦读,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌舱权,老刑警劉巖矗晃,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異刑巧,居然都是意外死亡喧兄,警方通過查閱死者的電腦和手機无畔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門啊楚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人浑彰,你說我怎么就攤上這事恭理。” “怎么了郭变?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵颜价,是天一觀的道長。 經(jīng)常有香客問我诉濒,道長周伦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任未荒,我火速辦了婚禮专挪,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘片排。我一直安慰自己寨腔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布率寡。 她就那樣靜靜地躺著迫卢,像睡著了一般。 火紅的嫁衣襯著肌膚如雪冶共。 梳的紋絲不亂的頭發(fā)上乾蛤,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天每界,我揣著相機與錄音,去河邊找鬼家卖。 笑死盆犁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篡九。 我是一名探鬼主播谐岁,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼榛臼!你這毒婦竟也來了伊佃?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤沛善,失蹤者是張志新(化名)和其女友劉穎航揉,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體金刁,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡帅涂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了尤蛮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片媳友。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖产捞,靈堂內(nèi)的尸體忽然破棺而出醇锚,到底是詐尸還是另有隱情,我是刑警寧澤坯临,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布焊唬,位于F島的核電站,受9級特大地震影響看靠,放射性物質(zhì)發(fā)生泄漏赶促。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一挟炬、第九天 我趴在偏房一處隱蔽的房頂上張望鸥滨。 院中可真熱鬧,春花似錦辟宗、人聲如沸爵赵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽空幻。三九已至,卻和暖如春容客,著一層夾襖步出監(jiān)牢的瞬間秕铛,已是汗流浹背约郁。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留但两,地道東北人鬓梅。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像谨湘,于是被迫代替她去往敵國和親绽快。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容