复制后的Matlab验证文件

时间:2018-02-15 14:08:49

标签: matlab file-transfer

我想知道在复制到另一个文件夹后,我们是否有办法使用matlab检查文件的完整性。

我在文件夹A中有8个文件。我将它们复制到detination文件夹B中。但最后我想验证文件夹B中复制的文件与文件夹A中原始文件的大小,完整性,文件中的数据完全相同。

2 个答案:

答案 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