Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 获取重复内容和部分内容,同时尝试仅获取文件的增量数据_C#_File - Fatal编程技术网

C# 获取重复内容和部分内容,同时尝试仅获取文件的增量数据

C# 获取重复内容和部分内容,同时尝试仅获取文件的增量数据,c#,file,C#,File,我有一个文件test.txt,它由第三方应用程序不断提供数据 现在我的要求是每1小时获取一次这个文件的数据,内容应该是增量的,没有重复的数据 示例- 第一次运行我的应用程序,如果test.txt的数据在下面 line 1......... line 2......... line 3......... data is continuously feeding line 1......... line 2......... line 3......... line 4......... line

我有一个文件
test.txt
,它由第三方应用程序不断提供数据

现在我的要求是每1小时获取一次这个文件的数据,内容应该是增量的,没有重复的数据

示例-

  • 第一次运行我的应用程序,如果
    test.txt
    的数据在下面

    line 1.........
    line 2.........
    line 3.........
    data is continuously feeding
    
    line 1.........
    line 2.........
    line 3.........
    line 4.........
    line 5.........
    
    然后我的文件
    first\u run\u file.txt的数据将

    line 1.........
    line 2.........
    line 3.........
    
    line 4.........
    line 5.........
    
  • 现在1小时后,如果
    test.txt
    的数据低于

    line 1.........
    line 2.........
    line 3.........
    data is continuously feeding
    
    line 1.........
    line 2.........
    line 3.........
    line 4.........
    line 5.........
    
    数据不断地传送

    然后我的文件
    second\u run\u file.txt的数据将被

    line 1.........
    line 2.........
    line 3.........
    
    line 4.........
    line 5.........
    
  • 下面是我正在使用的
    File.Seek
    的一段代码,结果文件要么有部分内容,要么有重复数据。读取文件并仅获取增量字节的最佳方法是什么

    byte[] arrBytes;
    using (var fileStream = new FileStream(@"C:\Temp\test.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
    {
        //save this value to store current stream lenght
        var fileSizeInBytes = fileStream.Length;
    
        //skip the bytes
        fileStream.Seek(0, SeekOrigin.Begin);
    
        //next time onward I'm using fileSizeInBytes for skip bytes, so that I only get incremental data
        //fileStream.Seek(fileSizeInBytes, SeekOrigin.Begin);
    
        arrBytes = new byte[fileStream.Length];
    
        fileStream.ReadAsync(arrBytes, 0, (int)fileStream.Length);
    
        File.WriteAllBytes("Foo.txt", arrBytes);
    }
    
  • first\u run\u file.txt文件可能有部分字节,如条目

    line 1.........
    line 2.........
    line 3.........
    li
    
    line 2.........
    line 3.........
    line 4.........
    line 5.........
    
    此处,
    第4行
    在结果文件中不完整

  • second\u run\u file.txt文件可能有部分字节,如条目

    line 1.........
    line 2.........
    line 3.........
    li
    
    line 2.........
    line 3.........
    line 4.........
    line 5.........
    
    这里的
    第2行..
    第3行..
    是重复的,它也出现在
    first_run_file.txt中


  • 您是否考虑过创建一个表示确切文件/数据结构的类?从那里将所有数据加载到一个列表中,并编写条件语句,根据您所期望的文本或文字内容检查文件。我只在数据同时读写时观察到上述问题。假设有一些文件写入,第三方应用程序停止,然后当我尝试读取增量数据时,就没有问题了。那么为什么会有两个不同的进程读取和/或更新同一个文件呢?我只是好奇。。听起来您需要为此执行多线程处理,但根据您的使用案例,我认为这很危险。一个遗留应用程序不断向文件提供数据,现在我的应用程序只是尝试以增量方式读取数据,用于不同的目的。