2016-03-03 2 views
1

Я создаю программное обеспечение для получения данных из .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(); 
     } 

Как я могу читать файлы по одному и передавать эти данные в базу данных.

Моя база данных - SMS таблица - 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

Благодаря г-н Sakura Это работал. Но я сделал небольшую модификацию для этой строки «byDataBuf = File.ReadAllBytes (openFileDialog1.FileName);». Я изменил «openFileDialog1.FileName» на «файл». Это все. Еще раз спасибо –

+0

Добро пожаловать :) Рад, что это вам поможет! – Sakura