浅诺回忆 2016-07-05 03:06 采纳率: 0%
浏览 2861
已结题

C#每5分钟执行一次操作,将读取到txt文本的最后一行主键记录,5分钟后遍历文件夹

文件夹有多个txt文档,每天按日期更新一个新的txt文档,已实现将7月4号以前的所有txt文档存入数据库,目前需求每5分钟循环一次文件夹读取新的txt文档将该文档目前所有的数据存入数据库将最后一行的主键(id和时间)记录,再过5分钟再循环一次文件夹根据txt文档名称找到上个txt文档根据主键找出新出现的数据并存入数据库,保存最后一行的主键,若出现新的txt文档按上面方法循环。图片说明(选中的两个日期一样,代表两个是不同机器生产,可能有多个机器)
选中的两个为主键图片说明
实现存数据库的代码如下:
try
{
string[] SADFEC = Directory.GetFiles(@"\saeca.sae.com.hk\SAET-FS\MEMs\CSSPData\FCB\Dippers\Dippers5\");
foreach (string file in SADFEC)
{

            DataTable dt = new DataTable();



            dt.Columns.Add("C1", Type.GetType("System.String"));
            dt.Columns.Add("machine_ID", Type.GetType("System.String"));
            dt.Columns.Add("product_time", Type.GetType("System.String"));
            dt.Columns.Add("time", Type.GetType("System.String"));
            dt.Columns.Add("Panel_ID", Type.GetType("System.String"));
            dt.Columns.Add("C6", Type.GetType("System.String"));
            dt.Columns.Add("C7", Type.GetType("System.String"));
            dt.Columns.Add("incoming_Qty", Type.GetType("System.String"));
            dt.Columns.Add("OPT_Defect", Type.GetType("System.String"));
            dt.Columns.Add("Dipping_Defect", Type.GetType("System.String"));
            dt.Columns.Add("All_time", Type.GetType("System.String"));


            StreamReader reader = new StreamReader(file);
            string panelstr = string.Empty;

            while ((panelstr = reader.ReadLine()) != null)
            {

                    string[] strary = panelstr.Split(';');

                    String erroqty = Convert.ToString(strary[0]);
                    if (erroqty != "0")
                    {
                        DataRow row = dt.NewRow();
                        string strdatetime = strary[2].Substring(6, 4) + "-" + strary[2].Substring(3, 2) + "-" + strary[2].Substring(0, 2);

                        string strdatetime2 = strary[4].Substring(0, 10);

                        row["C1"] = strary[0].ToString();
                        row["machine_ID"] = strary[1].ToString();
                        row["product_time"] = strdatetime.ToString();
                        row["time"] = strary[3].ToString();
                        row["Panel_ID"] = strdatetime2.ToString();
                        row["C6"] = strary[5].ToString();
                        row["C7"] = strary[6].ToString();
                        row["incoming_Qty"] = strary[7].ToString();
                        row["OPT_Defect"] = strary[8].ToString();
                        row["Dipping_Defect"] = strary[9].ToString();
                        row["All_time"] = strdatetime.ToString() + " " + strary[3].ToString();

                        dt.Rows.Add(row);
                    }


            }

            reader.Close();
            dt.TableName = "PANEL.dbo.Dipping_D";
            string rs = SqlHelper.SqlBulkCopyInsert(dt, "PANEL.dbo.Dipping_D");//引用方法
            if (rs == "OK")
            {
                MessageBox.Show("input succeed!");
            }
            else
            {
                MessageBox.Show("can't input! ");
            }
        }



            }

        catch(Exception ex) 
        {
            MessageBox.Show(ex.Message.ToString(), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }

    }
            请教大神如何添加代码
  • 写回答

3条回答 默认 最新

  • 唐之风采 2016-07-05 03:11
    关注

    思路:先获取到目录里的所有记事本文件的物理路径存放到list里(支持无限递归 即文件夹里有文件夹 里面才是记事本)
    一行一行读取list里没个记事本文件的每一行 拿到需要的数据 使用到:readLine indexof等
    拿到所有符合条件的数据 最后显示的页面上
    代码片段:
    //递归
    public static void GetTxt(DirectoryInfo dir)
    {
    FileInfo[] files = dir.GetFiles();

            FileAttributes fa;
            foreach (FileInfo item in files)
            {
                //if (item.Extension == ".txt")
                //{
                //遍历时忽略隐藏文件
                fa = item.Attributes & FileAttributes.Hidden;
                if (fa != FileAttributes.Hidden)
                {
                    //MessageBox.Show(item.FullName);
                    //所有的记事本全路径全部放入list集合中
                    list.Add(item.FullName);
                }
                //}
            }
    
            DirectoryInfo[] dirs = dir.GetDirectories();   //获取子目录
            foreach (DirectoryInfo item in dirs)
            {
                GetTxt(item);
            }
        }
    

    //循环list里所有记事本文件
    foreach (string item in list)
    {

                FileStream fs = new FileStream(item, FileMode.Open);
                StreamReader reader = new StreamReader(fs, Encoding.Default);
               try
                {
                    //循环读取记事本
                    while (true)
                    {
                        string str = reader.ReadLine();
                        if (str == null)
                        {
                            break;
                        }
                        else if (str.Trim() == "")
                        {
                            continue;
                        }
                        else
                        {
                  //这里就是每行数据了  你可以进行处理 取出符合要求的行
                        }
               }
    
    评论

报告相同问题?

悬赏问题

  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能
  • ¥15 Source insight编写代码后使用CCS5.2版本import之后,代码跳到注释行里面
  • ¥50 NT4.0系统 STOP:0X0000007B
  • ¥15 想问一下stata17中这段代码哪里有问题呀
  • ¥15 flink cdc无法实时同步mysql数据
  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决