检查MAT文件是否在没有加载的情况下损坏

时间:2016-07-12 09:37:51

标签: matlab corruption mat-file

我有一个由大量.mat个文件组成的数据集。每个.mat文件都具有相当大的尺寸,即加载它们非常耗时。不幸的是,其中一些已损坏且load('<name>')在这些文件上返回错误。我已经实现了一个try-catch例程来确定哪些文件已损坏。但是,鉴于只有少数几个文件已损坏的情况,加载每个文件并检查它是否已损坏是时间。有没有办法在不使用.mat的情况下检查load('<name>')文件的运行状况?

我无法在任何地方找到这样的解决方案。

1 个答案:

答案 0 :(得分:2)

matfile函数用于访问MAT文件中的变量,而不将它们加载到内存中。通过将try-catch例程更改为使用<?php require __DIR__ . "/vendor/autoload.php"; $settings = [ "version" => "latest", "region" => "eu-west-1", "credentials" => [ "key" => "AKIDEXAMPLE", "secret" => "wJalrXUtnFEMI/K7MDENG+bPxRfiCYEXAMPLEKEY", ], ]; $client = new \Aws\Ec2\Ec2Client($settings); $result = $client->describeInstances([ "Filters" => [ [ "Name" => "instance-state-name", "Value" => "running", ] ], ]); var_dump($result); 而不是class Aws\Result#82 (1) { private $data => array(2) { 'Reservations' => array(0) { } '@metadata' => array(4) { 'statusCode' => int(200) 'effectiveUri' => string(35) "https://ec2.eu-west-1.amazonaws.com" 'headers' => array(5) { ... } 'transferStats' => array(1) { ... } } } } ,可以减少将大文件加载到内存中的开销。

由于matfile似乎只在阅读损坏的文件时发出警告,因此您必须检查是否已发出此警告。这可以在调用load之前使用lastwarn:clear matfile完成,并检查警告是否在之后发出:

lastwarn

您必须先找出相关的警告ID,方法是在损坏的文件上运行上述代码,然后保存matfile

更强大的解决方案是在创建时计算文件的校验和或散列(例如MD5),并在读取文件之前比较该校验和。