Cannot open a structure file in Matlab
17 次查看(过去 30 天)
显示 更早的评论
Hello,
I'm operating Matlab2018a on a Windows 10 machine. I can create structure files, but cannot open them. I get this warning/error:
Warning: Unexpected end-of-file while reading compressed data
Error using load
Cannot read file Y:\....filneame.mat
The drive that I'm saving and opening from is a network drive. I have read/write permissions on this drive and can read other non-structure files with no issues.
Is there a solution for this?
Thanks.
11 个评论
Walter Roberson
2020-6-26
I find hints that the configuration of the smb server and related technologies can affect reliability, but there are a lot of different ways to configure to meet different goals and network configurations, and my decade old peripheral experience does not leave me qualified to advise on current systems.
I don't expect that the problem lies in MATLAB... but MATLAB might be using the network in ways that are not typical for other network work in your organization.
One thing that MATLAB is known to struggle with is differences in time stamp between server and client, as it examines file update times as part of path management. That would tend to affect source files more than mat files.
There was a problem a few releases ago having to do with cache synchronization between OneDrive and MATLAB. It might be worth looking up the details to see if there could be a similar issue in your configuration.
回答(1 个)
Monisha Nalluru
2020-7-10
The reason for this error might be due to MAT file corruption in the network drive.
Another indication of the MAT file being corrupt are error messages related to ‘HDF5’ appearing in MATLAB Command Window/Linux or MacOS Terminal/Windows Command prompt.
You can try to recover the non-corrupt portions or individual variables in the mat file using matfilecommand.
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 which 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'
4 个评论
Monisha Nalluru
2020-7-15
Hi Shannon,
Can you check by saving the files in these version and check the load command, as I am not able to reproduce the error at my end.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Image Data 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!