2016-03-03 179 views
1

我正在創建一個軟件以從.dat文件獲取數據並將這些數據寫入數據庫。有很多.dat文件,所以我需要做一個批處理。我正在使用此代碼讀取一個dat文件如何在一個文件夾中逐個讀取.DAT文件

 UDisk udisk = new UDisk(); 

     byte[] byDataBuf = null; 
     int iLength;//length of the bytes to get from the data 

     string sPIN2 = ""; 
     string sVerified = ""; 
     string sTime_second = ""; 
     string sDeviceID = ""; 
     string sStatus = ""; 
     string sWorkcode = ""; 

     openFileDialog1.Filter = "1_attlog(*.dat)|*.dat"; 
     openFileDialog1.FileName = "1_attlog.dat";//1 stands for one possible deviceid 
     if (openFileDialog1.ShowDialog() == DialogResult.OK) 
     { 
      FileStream stream = new FileStream(openFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Read); 
      byDataBuf = File.ReadAllBytes(openFileDialog1.FileName); 
      iLength = Convert.ToInt32(stream.Length); 

      lvSSRAttLog.Items.Clear(); 
      int iStartIndex = 0; 
      int iOneLogLength;//the length of one line of attendence log 
      for (int i = iStartIndex; i < iLength - 2; i++)//modify by darcy on Dec.4 2009 
      { 
       if (byDataBuf[i] == 13 && byDataBuf[i + 1] == 10) 
       { 
        iOneLogLength = (i + 1) + 1 - iStartIndex; 
        byte[] bySSRAttLog = new byte[iOneLogLength]; 
        Array.Copy(byDataBuf, iStartIndex, bySSRAttLog, 0, iOneLogLength); 

        udisk.GetAttLogFromDat(bySSRAttLog, iOneLogLength, out sPIN2, out sTime_second, out sDeviceID, out sStatus, out sVerified, out sWorkcode); 

        ListViewItem list = new ListViewItem(); 
        list.Text = sPIN2; 
        list.SubItems.Add(sTime_second); 
        list.SubItems.Add(sDeviceID); 
        list.SubItems.Add(sStatus); 
        list.SubItems.Add(sVerified); 
        list.SubItems.Add(sWorkcode); 
        lvSSRAttLog.Items.Add(list); 

        bySSRAttLog = null; 
        iStartIndex += iOneLogLength; 
        iOneLogLength = 0; 
       } 
      } 
      stream.Close(); 
     } 

如何逐個讀取文件並將這些數據傳輸到數據庫中。

我的數據庫是 - 短信 表 - CHECKINOUT

  columns -CHECKDate datetime  
        CHECKTime datetime  
        InOutMode int 
        Status  varchar(50) 
        WorkCode  varchar(50) 
        Memoinfo  varchar(50) 
        sn   int 
        sn2   int 
        Ip   varchar(16) 
        Updated  int 

回答

1

給定一個文件夾路徑,您可以使用Directory.EnumerateFiles得到.dat文件逐一:

string folder = @"D:\your\Folder"; 
foreach(var file in Directory.EnumerateFiles(
    folder,        // folder path 
    "*.dat"        // file type you want 
    /*, SearchOption.AllDirectories*/)) // uncomment it if you want open files in subfolder 
{ 
    FileStream stream = new FileStream(file, FileMode.OpenOrCreate, FileAccess.Read); 
    byDataBuf = File.ReadAllBytes(openFileDialog1.FileName); 
    iLength = Convert.ToInt32(stream.Length); 

    // Do your stuff here 

    stream.Close(); 
} 
+0

感謝櫻花據先生工作。但我對這一行做了一些小修改「byDataBuf = File.ReadAllBytes(openFileDialog1.FileName);」。我將「openFileDialog1.FileName」更改爲「文件」。就這樣。再次感謝 –

+0

不客氣:)很高興幫助你! – Sakura