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