我觉得可以依赖数据库。
建表,表里保存文件名和文件内容,然后用sql来处理就行了。

解决方案 »

  1.   

    1:使用File.ReadAllLines() 读取数据到数组;
    2:使用Except()方法取数组的交集,判断为空或者Count不为0 即可。
      

  2.   

    我还是想通过一个控件把 数据全部显示出来,起码界面有点东西能看。。listbos这个控件可行吗
      

  3.   

    网上一些文件比较的算法应该能满足楼主的需求的,可以在codeproject上面搜索下相关的算法,在按需修改下,,比如我知道的V DIFF
      

  4.   

         StreamReader sr = new StreamReader("D:/test.txt");
                string content = sr.ReadToEnd();
                string[] str = content.Split(new string[] { "\r\n" }, StringSplitOptions.None);
      

  5.   

    我觉得与其用listbox,不如放到datagridview里,每个文件一列,列名是文件名,这样看起来会比较清晰
    至于不会用数组的问题,不会用,不会学吗
    数组都不会用,还读什么文件
      

  6.   


    怎么去做比较检查呢? 数据我自己用了比较笨的方法实现了,代码没您的简便。 FolderBrowserDialog dialog = new FolderBrowserDialog();
                if (dialog.ShowDialog() == DialogResult.OK)
                {                foldPath = dialog.SelectedPath;
                    DirectoryInfo TheFolder = new DirectoryInfo(foldPath);
                    fileName = Path.GetFileName(dialog.SelectedPath);//获取当前打开文件夹名称 
                    foreach (FileInfo NextFile in TheFolder.GetFiles())
                    {
                        string tempStr = File.ReadAllText(NextFile.FullName, Encoding.GetEncoding("GB2312"));//读取txt内容
                        this.listBox1.Items.Add(tempStr);
                    }
             
                }
      

  7.   

    你还是先玩明白List<string>这个东西,然后学习一下linq的用法
    或者自己写循环比较也行
    不要把数据直接扔控件里去,那样处理起来太不方便了
      

  8.   


    lblWait.Visible = true;
                    Application.DoEvents();
                    //Thread.Sleep(100);
                    var query = (from a in dt1.AsEnumerable()
                                 where dt2.AsEnumerable().Where(b => a.Field<string>("报关单号") == b.Field<string>("报关单号")).Count() == 0
                                 select a);//.Concat(dt2.AsEnumerable());//.GroupBy(l=> l.Field<string>("报关单号"));
                    rtxt.Text = "报关单号";
                    //query.ToList
                    rtxt.Text = "\r\n第一个Excel";
                    query.ToList().ForEach(c => rtxt.Text += "\r\n" + Convert.ToString(c.ItemArray[0]));
                    //DataTable dt3 = query.AsDataView().ToTable();
                    //foreach (DataRow item in dt3.Rows)
                    //{
                    //    rtxt.Text += "\r\n" + item["报关单号"];
                    //    Application.DoEvents();
                    //}
                    rtxt.Text = "\r\n第二个Excel";
                    var query1 = (from a in dt2.AsEnumerable()
                                 where dt1.AsEnumerable().Where(b => a.Field<string>("报关单号") == b.Field<string>("报关单号")).Count() == 0
                                 select a);
                    query1.ToList().ForEach(c => rtxt.Text += "\r\n" + Convert.ToString(c.ItemArray[1]));
                    //DataTable dt4 = query1.AsDataView().ToTable();
                    //foreach (DataRow item in dt4.Rows)
                    //{
                    //    rtxt.Text += "\r\n" + item["报关单号"];
                    //    Application.DoEvents();
                    //}
                    lblWait.Visible = false;
                }读到数据库 转成 dt 之后对比
      

  9.   


    就是一个简单的小程序,如果用数据库去检索的话我自己也能写了那就把文件都读入到List<string,string>里,缓存起来,然后客户新增资料的时候,用客户资料去匹配这个list。
      

  10.   


    怎么去做比较检查呢? 数据我自己用了比较笨的方法实现了,代码没您的简便。 FolderBrowserDialog dialog = new FolderBrowserDialog();
                if (dialog.ShowDialog() == DialogResult.OK)
                {                foldPath = dialog.SelectedPath;
                    DirectoryInfo TheFolder = new DirectoryInfo(foldPath);
                    fileName = Path.GetFileName(dialog.SelectedPath);//获取当前打开文件夹名称 
                    foreach (FileInfo NextFile in TheFolder.GetFiles())
                    {
                        string tempStr = File.ReadAllText(NextFile.FullName, Encoding.GetEncoding("GB2312"));//读取txt内容
                        this.listBox1.Items.Add(tempStr);
                    }         
                }
     public static string[] GetString(string[] values)
            {
                List<string> list = new List<string>();
                for (int i = 0; i < values.Length; i++)//遍历数组成员 
                {
                    if (list.IndexOf(values.ToLower()) == -1)
                        list.Add(values);            }
                return list.ToArray();
            }
      

  11.   

    这个方法不错,够简洁!
    Enumerable.Except<TSource> 方法 
    里面的示例代码很简单哦。如果自定义数据类型,需要实现比较器(就是自定义比较函数)
          double[] numbers1 = { 2.0, 2.1, 2.2, 2.3, 2.4, 2.5 };
          double[] numbers2 = { 2.2 };      IEnumerable<double> onlyInFirstSet = numbers1.Except(numbers2);      foreach (double number in onlyInFirstSet)
             outputBlock.Text += number + "\n";      /*
           This code produces the following output:       2
           2.1
           2.3
           2.4
           2.5
          */
      

  12.   


    怎么去做比较检查呢? 数据我自己用了比较笨的方法实现了,代码没您的简便。 FolderBrowserDialog dialog = new FolderBrowserDialog();
                if (dialog.ShowDialog() == DialogResult.OK)
                {                foldPath = dialog.SelectedPath;
                    DirectoryInfo TheFolder = new DirectoryInfo(foldPath);
                    fileName = Path.GetFileName(dialog.SelectedPath);//获取当前打开文件夹名称 
                    foreach (FileInfo NextFile in TheFolder.GetFiles())
                    {
                        string tempStr = File.ReadAllText(NextFile.FullName, Encoding.GetEncoding("GB2312"));//读取txt内容
                        this.listBox1.Items.Add(tempStr);
                    }         
                }
     public static string[] GetString(string[] values)
            {
                List<string> list = new List<string>();
                for (int i = 0; i < values.Length; i++)//遍历数组成员 
                {
                    if (list.IndexOf(values.ToLower()) == -1)
                        list.Add(values);            }
                return list.ToArray();
            }
    版主,我可不可以厚颜无耻的恳求您写个完整的代码拿来学习一下呢? 搞了一下午没搞出来,无法面对室友了
      

  13.   

    这个so easy了,我帮一个朋友弄过这个问题,用Java把数据插入到数据库,然后用查询语句查出不重复的给他就ok了
      

  14.   

    我的思路
    1.建立个map 列表,map[filename] = 文件内容list
    2.全读取文件内容放上面的map表里
    3.双循环map和list ,遇到相同的就添加 文件名效率肯定高不了,但也比插入数据库快......
      

  15.   

    为啥非要数据库呢   泛型  linq to object就可以解决
      

  16.   

    为啥非要数据库呢   泛型  linq to object就可以解决 能帮忙写个代码学习下么?
      

  17.   


    有心了,能看下代码么。但我还是需要有按钮来打开整个文件夹的把所有的要处理的文件放在软件所在目录的data文件夹内就行了