Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.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中,从文件的非起始处写入二进制文件的块# 原因:_C#_Console Application - Fatal编程技术网

C# 在C中,从文件的非起始处写入二进制文件的块# 原因:

C# 在C中,从文件的非起始处写入二进制文件的块# 原因:,c#,console-application,C#,Console Application,我有一个哈希列表(它是从2个源文件创建的,这些源文件被分割成若干个块,因此chunk1有hash1,chunk2有hash2等等),我希望与文件的块匹配 问题是其中一个块与file1的结尾和file2的开头匹配。 我不知道这两个文件的区块中有多少文件2,但我知道哈希值将匹配从开始的偏移量开始的文件2区块(从该点开始,哈希值将匹配文件2区块) 所以我的思想过程是获取file2的一个块,做一个散列,比较:If match=>保持分块和散列。如果不匹配:将块的开头偏移1字节(表示文件的开头+1字节)、

我有一个哈希列表(它是从2个源文件创建的,这些源文件被分割成若干个块,因此chunk1有hash1,chunk2有hash2等等),我希望与文件的块匹配

问题是其中一个块与file1的结尾和file2的开头匹配。 我不知道这两个文件的区块中有多少文件2,但我知道哈希值将匹配从开始的偏移量开始的文件2区块(从该点开始,哈希值将匹配文件2区块)

所以我的思想过程是获取file2的一个块,做一个散列,比较:If match=>保持分块和散列。如果不匹配:将块的开头偏移1字节(表示文件的开头+1字节)、哈希、比较、将块的开头偏移2字节、哈希、比较等,直到找到匹配项

块大小(N)和哈希算法是已知的,对于这个问题并不重要。File1和file2是二进制文件,不应转换为文本或字符串。我已检查哈希文件1的前N个字节是否与哈希文件1匹配

如何: 对于输入文件,从(文件开头)到N读取一个N字节的块,然后将该块写入一个新文件。然后从(文件开始)+1字节到N+1字节读取一个N字节的块,写入,读取(文件开始)+2字节到N+2字节,写入等等

在C#中,我有以下代码将整个文件分割成块:(稍后我将对其进行修改,以仅分割第一个块)

publicstaticvoidsplitfile(stringinputfile、intchunksize、stringpath)
{
const int BUFFER_SIZE=数量;
字节[]缓冲区=新字节[缓冲区大小];
使用(流输入=File.OpenRead(inputFile))
{
int指数=0;
while(input.Position0&&(bytesRead=input.Read)(缓冲区,0,
Math.Min(剩余,缓冲区大小))>0)
{
输出写入(缓冲区,0,字节读取);
剩余-=字节读取;
}
}
索引++;
}
}
}
问题是: 如何设置偏移量,以便分块从不是文件开头的特定字节开始,但从偏移量字节开始?

您可以使用或。
    public static void SplitFile(string inputFile, int chunkSize, string path)
    {
        const int BUFFER_SIZE = NUMBER;
        byte[] buffer = new byte[BUFFER_SIZE];

        using (Stream input = File.OpenRead(inputFile))
        {
            int index = 0;
            while (input.Position < input.Length)
            {
                using (Stream output = File.Create(path + index))
                {
                    int remaining = chunkSize, bytesRead;
                    while (remaining > 0 && (bytesRead = input.Read(buffer, 0,
                            Math.Min(remaining, BUFFER_SIZE))) > 0)
                    {
                        output.Write(buffer, 0, bytesRead);
                        remaining -= bytesRead;
                    }
                }
                index++;
            }
        }
    }