我有一个由大量.mat文件组成的数据集。每个.mat文件都有相当大的大小,即加载它们很费时。不幸的是,其中一些文件已损坏,load('<name>')在这些文件上返回错误。我已经实现了一个尝试-捕获例程,以确定哪些文件已损坏。但是,考虑到只有少数文件损坏的情况,加载每个文件并检查它是否损坏是占用时间的。有没有办法不使用.mat来检查load('<name>')文件的健康状况?
我在任何地方都未能找到这样的解决办法。
发布于 2016-07-12 11:24:30
matfile函数用于访问MAT文件中的变量,而不将它们加载到内存中.通过将尝试捕获例程更改为使用matfile而不是load,可以减少将大型文件加载到内存中的开销。
由于matfile只在读取损坏的文件时发出警告,因此必须检查是否发出了此警告。这可以在调用lastwarn:lastwarn之前使用matfile:清除matfile,并检查警告是否在之后发出:
lastwarn('');
matfile(...);
[~, warnId] = lastwarn;
if strcmp(warnId, 'relevantWarningId')
% File is corrupt
end您必须首先通过在损坏的文件上运行上述代码并保存warnId来查找相关的警告id。
一个更健壮的解决方案是在创建文件时计算文件的校验和或散列(例如MD5),并在读取文件之前对此校验和进行比较。
https://stackoverflow.com/questions/38325121
复制相似问题