2016-03-03 216 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