我想知道在复制到另一个文件夹后,我们是否有办法使用matlab检查文件的完整性。
我在文件夹A
中有8个文件。我将它们复制到detination文件夹B
中。但最后我想验证文件夹B
中复制的文件与文件夹A
中原始文件的大小,完整性,文件中的数据完全相同。
答案 0 :(得分:0)
您可以运行system
命令来计算校验和&然后从捕获的输出中解析出来。这取决于你的操作系统哪个命令是合适的。
下面的代码可以帮助您入门。我包括Windows的示例和Linux的一些示例。但是,由于我没有启用Linux Box,因此我没有包含任何代码来解析system
输出中的cksum值。
if ispc
srcCmd = sprintf('CertUtil -hashfile %s MD5',fullPathToSourceFile);
dstCmd = sprintf('CertUtil -hashfile %s MD5',fullPathToDestFile);
[stat_S,cmdout_S] = system(srcCmd);
[stat_D,cmdout_D] = system(dstCmd);
parsed_S = textscan(cmdout_S,'%s','delimiter','\n');
MD5_S = parsed_S{1}{2};
parsed_D = textscan(cmdout_D,'%s','delimiter','\n');
MD5_D = parsed_D{1}{2};
if strcmp(MD5_S,MD5_D)
disp('MD5 Good :)')
else
disp('MD5 Bad :(')
end
elseif isunix
srcCmd = sprintf('cksum %s',fullPathToSourceFile);
dstCmd = sprintf('cksum %s',fullPathToDestFile);
[stat_S,cmdout_S] = system(srcCmd);
[stat_D,cmdout_D] = system(dstCmd);
%Insert parsing & checking code for Linux
end
答案 1 :(得分:0)
这是检查文件的另一种方法,它是“手动”的,我们只打开两个文件并检查数据。 MD5
检查必须更快,但在我看来,当我们查看和保存文件而不更改时,它会被意外更改。
clc; clear;
fA=dir('E:/folderA');
fB=dir('E:/folderB');
for i=1:length(fA)
pos=find(cellfun(@(x)isequal(x,fA(i).name),{fB.name}));
if (fA(i).isdir == 1 || isempty(pos))
continue;
end
%open file in FolderA
fid=fopen(['E:/folderA/' fA(i).name],'r');
dataA=fread(fid,inf,'char');
fclose(fid);
%open file in FolderB
fid=fopen(['E:/folderB/' fA(i).name],'r');
dataB=fread(fid,inf,'char');
fclose(fid);
%Isequal
if (isequal(dataA,dataB))
disp(['file ' fA(i).name ' is exactly the same.'])
else
%print something
end
end