1. 程式人生 > 程式設計 >C#建立及讀取DAT檔案操作

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的換行
}

執行結果:

C#建立及讀取DAT檔案操作

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的結果:

C#建立及讀取DAT檔案操作

3.使用命令視窗對資料進行作圖

開啟a.dat所在目錄

C:\Users\Adninistrator>D:

使用gnuplot命令

D:\>gnuplot

使用資料檔案作圖:

gnuplot>plot "a.dat" w l

執行結果:

C#建立及讀取DAT檔案操作

4.下一步的任務

接下來就是要使用C#呼叫gnuplot進行畫圖(不使用命令視窗,也不需要輸入命令),然後將影象進行儲存後,再顯示到 C# 中的 picturebox 中就行。

以上這篇C#建立及讀取DAT檔案操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。