Why do I get "Error using load Cannot read file .." when trying to load a '.mat ' file on a different computer and how do I resolve it?

144 vues (au cours des 30 derniers jours)
I saved my MATLAB workspace to a MAT-file ('test.mat') on a computer (say 'computer 1') and transferred it to another computer (say 'computer 2') using a cloud storage service (for e.g. https://www.box.com/).
The saved mat file ('test.mat') loads without any issues on the computer it was created. But, when I try to load 'test.mat' in MATLAB on 'computer 2' using:
load test.mat
I receive the following error:\n
Error using load
Cannot read file
C:\...\file_location\large_mat.mat
My questions are:
  1. Why can't I load the .mat file in MATLAB on computer 2? What is the underlying reason for the error?
  2. Is the MAT file corrupt? 
  3. Can the data in the file be recovered somehow?

Réponse acceptée

MathWorks Support Team
MathWorks Support Team le 30 Déc 2020
Assuming that the file was saved properly on 'computer 1', without any issues. The possible answers to your questions are as follows:
1) Why can't I load the .mat file in MATLAB on computer 2? What is the underlying reason for the error?
The fact that the MAT file loads fine on 'computer 1', one possibility is that the file may have been corrupted during the transfer to 'computer 2' using the cloud storage service. While there can be many reasons behind this, one way to verify this is to re-send the file to 'computer 2' using a different approach, (say using a USB flash drive / external hard drive/email / a different cloud storage service). Then try to load it in MATLAB on 'computer 2'. I have had a similar experience when transferring a large MAT file using Box (https://www.box.com/) corrupted the MAT file. 
I would also suggest trying out MATLAB Drive for storing and transferring your MATLAB related files:
2) Is the MAT file corrupt? 
The error suggests that the MAT file is probably corrupt and there is very little that can be done about it. Another indication of the MAT file being corrupt are error messages related to 'HDF5' appearing on the MATLAB Command Window / Linux or MacOS Terminal / Windows Command prompt. 
For example:
HDF5-DIAG: Error detected in HDF5 (1.8.12) thread 0: #000: H5Dio.c line 179 in H5Dread(): can't read data major: Dataset minor: Read failed #001: H5Dio.c line 547 in H5D__read(): can't read data .....
3) Can the data in the file be recovered somehow?
You can try to recover the 'non-corrupt' portions of individual variables in the mat file by using the 'matfile' command (https://www.mathworks.com/help/matlab/ref/matlab.io.matfile.html). Consider for example that 'test.mat' has a variable 'v' that is unreadable. You can first get the size of this variable using the 'size' function as follows: 
m = matfile('test.mat'); size(m,'v') ans = 6 100
This tells us that the variable 'v' in 'test.mat' is a 2-D array that has 6 rows and 100 columns (a total of 600 values). You can then try to read the 'non-corrupt' values in 'v' and store them in a new array 'vRec' as follows:
vRec = zeros(6,100); % pre-allocate for efficiency for i = 1:6 for j = 1:100 try vRec(i,j) = m.v(i,j); % store the value if it is not corrupt catch vRec(i,j) = NaN; % if the value is corrupt/unreadable store 'NaN' disp([int2str(i) ',' int2str(j) ' is unreadable.']); % display the indices of the unreadable elements end end end  
The above code will try to read all the 'non-corrupt' values in 'v' and store them in 'vRec'. The corrupt values in 'v' will be stored as 'NaNs'.

Plus de réponses (0)

Catégories

En savoir plus sur Low-Level File I/O dans Help Center et File Exchange

Produits


Version

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by