gpt4 book ai didi

c# - 在 C# 中比较 blob 文件与字节

转载 作者:行者123 更新时间:2023-12-02 08:02:30 24 4
gpt4 key购买 nike

早期的逻辑是比较存储在 Windows 文件夹位置中的文件。请参阅下面的代码来根据字节比较 2 个文件

const int BYTES_TO_READ = 1024;

public static bool filesAreDifferent(string file1, string file2) {
FileInfo fi1 = new FileInfo(file1);
FileInfo fi2 = new FileInfo(file2);

if (!fi1.Exists || !fi2.Exists) return true;
if (fi1.Length != fi2.Length) return true;

int iterations = (int)Math.Ceiling((double)fi1.Length / BYTES_TO_READ);

using (FileStream fs1 = fi1.OpenRead())
using (FileStream fs2 = fi2.OpenRead()) {
byte[] one = new byte[BYTES_TO_READ];
byte[] two = new byte[BYTES_TO_READ];

for (int i = 0; i < iterations; i++) {
fs1.Read(one, 0, BYTES_TO_READ);
fs2.Read(two, 0, BYTES_TO_READ);
if (!one.SequenceEqual(two)) return true;
}
}

return false;
}

现在我想合并存储在 blob 容器中的 2 个文件。以下是我迄今为止尝试过的(调整旧逻辑),

public static CloudBlobContainer GetStorageAccount(bool IsCreateIfNotExists)
{
var ff = ConfigurationManager.AppSettings["AzureWebJobsStorage"];
string configvalue1 = ConfigurationManager.AppSettings["AzureWebJobsStorage"];
string configvalue2 = ConfigurationManager.AppSettings["AzureWebJobsStorage"];

CloudBlobContainer blob = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["AzureWebJobsStorage"])
.CreateCloudBlobClient()
.GetContainerReference(ConfigurationManager.AppSettings["BlobCotainer"]);

if(IsCreateIfNotExists)
blob.CreateIfNotExistsAsync();

return blob;

}

public static bool filesAreDifferentBlob(string file1, string file2)
{
CloudBlockBlob fil1 = GetStorageAccount(true).GetBlockBlobReference(file1);
CloudBlockBlob fil2 = GetStorageAccount(true).GetBlockBlobReference(file2);
fil1.FetchAttributes();
fil2.FetchAttributes();

if (!fil1.Exists() || !fil2.Exists()) return true;
if (fil1.Properties.Length != fil1.Properties.Length) return true;

int iterations = (int)Math.Ceiling((double)fil1.Properties.Length / BYTES_TO_READ);
using (StreamReader fsf1 = new StreamReader(fil1.OpenRead()))
using (StreamReader fsf2 = new StreamReader(fil2.OpenRead()))
{
byte[] one = new byte[BYTES_TO_READ];
byte[] two = new byte[BYTES_TO_READ];

for (int i = 0; i < iterations; i++)
{
fsf1.Read(one, 0, BYTES_TO_READ);
fsf2.Read(two, 0, BYTES_TO_READ);
if (!one.SequenceEqual(two)) return true;
}
}
return false;
}

但我收到错误“无法从 byte[] 转换为 char[]”。有什么方法可以比较 blob 中的 2 个文件吗?

最佳答案

Is there any way to compare to 2 files from blob?

正如托马斯提到的,我们可以比较 ContentMD5 blob 的哈希值,而不是比较所有字节。我们可以轻松得到ContentMD5你的 blob 的哈希值。

fil1.FetchAttributes();
fil2.FetchAttributes();
if (!fil1.Exists() || !fil2.Exists()) return true;
if (fil1.Properties.ContentMD5!= fil2.Properties.ContentMD5) return true;
return false;

关于c# - 在 C# 中比较 blob 文件与字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53004782/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com