C#建立及讀取DAT檔案操作
*.DAT 從字尾名上也能理解其中的含義即:data檔案,資料檔案;這個檔案有的可以用記事本工具開啟,但是加密後就不一定了。
很多程式都建立dat檔案來儲存設定。建立一個只有自己才能解析得dat檔案,並且可以讀取和寫入,寫一個類,它可以建立一個只有使用這個類才能解析得dat檔案。
同時讀取或寫入資料進dat檔案時,也只可以使用這個類來讀取寫入。
簡單來說就是這個類是開啟讀取寫入這個dat檔案得鑰匙!其實用來儲存設定的檔案字尾名可以各種各樣。
一、讀寫設定檔案類
/// <summary> /// 加密、解密 /// </summary> public class EncryptUtilSeal { private static byte[] key = new byte[] { 78,56,61,94,12,88,63,66,111,102,77,1,186,97,45 }; private static byte[] iv = new byte[] { 36,34,42,122,242,87,2,90,59,117,123,72,171,130,61 }; private static IFormatter S_Formatter = null; static EncryptUtilSeal() { S_Formatter = new BinaryFormatter();//建立一個序列化的物件 } /// <summary> /// 採用Rijndael128位加密二進位制可序列化物件至檔案 /// </summary> /// <param name="para">二進位制物件</param> /// <param name="filePath">檔案路徑</param> /// <returns></returns> public static bool EncryptObject(object para,string filePath) { //建立.bat檔案 如果之前錯在.bat檔案則覆蓋,無則建立 using (Stream fs = new FileStream(filePath,FileMode.Create,FileAccess.Write,FileShare.None)) { RijndaelManaged RMCrypto = new RijndaelManaged(); CryptoStream csEncrypt = new CryptoStream(fs,RMCrypto.CreateEncryptor(key,iv),CryptoStreamMode.Write); S_Formatter.Serialize(csEncrypt,para);//將資料序列化後給csEncrypt csEncrypt.Close(); fs.Close(); return true; } } /// <summary> /// 從採用Rijndael128位加密的檔案讀取二進位制物件 /// </summary> /// <param name="filePath">檔案路徑</param> /// <returns>二進位制物件</returns> public static object DecryptObject(string filePath) { //開啟.bat檔案 using (Stream fs = new FileStream(filePath,FileMode.Open,FileAccess.Read,FileShare.Read)) { object para; RijndaelManaged RMCrypto = new RijndaelManaged(); CryptoStream csEncrypt = new CryptoStream(fs,RMCrypto.CreateDecryptor(key,CryptoStreamMode.Read); para = S_Formatter.Deserialize(csEncrypt); //將csEncrypt反序列化回原來的資料格式; csEncrypt.Close(); fs.Close(); return para; } } }
呼叫:
string ConfigFilePath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory,"config.dat"); //寫入 Hashtable para = new Hashtable(); para.Add("ZH",tbxZH.Text); para.Add("MM",pbxMM.Password); EncryptUtilSeal.EncryptObject(para,ConfigFilePath); //讀取 Hashtable para = new Hashtable(); object obj = EncryptUtilSeal.DecryptObject(ConfigFilePath); para = obj as Hashtable; string ZH = para["ZH"].ToString(); string MM = para["MM"].ToString();
補充知識:C# 輸出資料表並生成.dat檔案
目前想實現的功能是:輸出引數(比如距離、功率等)在某個區間內變化時對應的傳輸損耗資料,然後進行畫圖。
暫時實現的是將輸出的資料顯示在textbox中,然後生成.dat檔案。這樣的話,後面呼叫gnuplot作圖的時候就只需要使用這個.dat檔案就可以了。
所以這一篇部落格是介紹怎麼用C#產生多組資料顯示到textbox中,並將這些資料儲存成為一個.dat檔案。
1.產生資料並顯示
以Hata模型中城市的傳輸損耗計算為例,讓發射頻率固定為900MHz,基站天線高度30m,移動臺天線高度1m,傳輸距離範圍為1~20km,計算傳輸損耗值,輸出對應資料表到 textbox 中顯示。
int f_c = 900; //發射頻率 int h_te = 30; //基站天線高度 int h_re = 1; //移動臺天線高度 int d; //傳輸距離 double L; for (d = 10; d <= 20; d++) { L = 69.55 + 26.16 * (Math.Log10(f_c)) - 13.82 * (Math.Log10(h_te)) - (3.2 * (Math.Log10(11.75 * h_re)) * (Math.Log10(11.75 * h_re)) - 4.97) + (44.9 - 6.55 * (Math.Log10(h_te))) * (Math.Log10(d)); Txt_data.Text += d.ToString(); Txt_data.Text += " "; Txt_data.Text += L.ToString("0.00"); //保留兩位小數 Txt_data.Text += "\r\n"; //textbox的換行 }
執行結果:
2.產生.dat檔案
實際上是將 textbox 中的資料寫到建立的資料檔案中。
需要加入引用:
using System.IO;
程式碼:
FileStream fs = new FileStream("D:\\a.dat",FileMode.Create); //支援檔案讀寫 BinaryWriter bw = new BinaryWriter(fs); //二進位制輸入 bw.Write(System.Text.Encoding.Default.GetBytes(this.Txt_data.Text)); //轉化為二進位制寫入檔案 bw.Flush(); //清理緩衝器 bw.Close(); fs.Close();
使用VC開啟a.dat的結果:
3.使用命令視窗對資料進行作圖
開啟a.dat所在目錄
C:\Users\Adninistrator>D:
使用gnuplot命令
D:\>gnuplot
使用資料檔案作圖:
gnuplot>plot "a.dat" w l
執行結果:
4.下一步的任務
接下來就是要使用C#呼叫gnuplot進行畫圖(不使用命令視窗,也不需要輸入命令),然後將影象進行儲存後,再顯示到 C# 中的 picturebox 中就行。
以上這篇C#建立及讀取DAT檔案操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。