早期的逻辑是比较存储在Windows文件夹位置的文件。请查看下面的代码,以比较两个基于字节的文件
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个文件进行比较吗?
答案 0 :(得分:2)
有什么方法可以将blob中的两个文件进行比较吗?
正如Thomas所提到的,我们可以比较blob的ContentMD5哈希,而不是比较所有字节。我们可以轻松获取ContentMD5个哈希值。
fil1.FetchAttributes();
fil2.FetchAttributes();
if (!fil1.Exists() || !fil2.Exists()) return true;
if (fil1.Properties.ContentMD5!= fil2.Properties.ContentMD5) return true;
return false;