Background
I encountered some strange behaviour with the function "matfile" in Matlab 2016b - not sure what's going on, and I can't replicate it or create a test case.
I have a structure, which I saved to a server, like so:
PathToFile='ServerPath\My Documents\MyProj\testMatF.mat';
save(PathToFile,'-struct','myStruct'); %I tried the -v7.3 flag
Problem
Then I read it in with:
m1=matfile(PathToFile);
On other, very similar structs, I can do:
myFields=fieldnames(m1);
But for this one file I can't, all I get is the auto "Properties" field.
What I've tried
myFields=who(m1)- gives me list of fieldnames... sometimes. I don't know thewhofunction well, but it seems, if I interspersewho m1thenmyFields=who(m1)it works.Explicitly typing
m1.TheFieldName, works.Moving the file to a location on the comp, like
C:\Data\. Then usingfieldnamesworks.Using
load, works.
Does it have to do with the server access, corrupted file, matfile properties? One other weird thing is some of my .m files in this particular folder, when I try to open them results in: Does not exist, when clearly it does, since I click on it and can use the run function with it... Additional: Windows 7. Recently updated license.
Please let me know what info you can use to help out. Either to create a new file that will work, or fix the problem with the current file. Thanks.
EDIT
Example output in my command window - seemingly incomprehensible...
m1=matfile(fullfile(projPath,'NexusMarkersProcessed.mat'),'Writable',false)
m1 =
matlab.io.MatFile
Properties: Properties.Source: '\bontempi.medicine.utorad.utoronto.ca\home\PT\zabjeklab3\My Documents\Data\Active Projects\JC_Hip\FL1502\FL1502\Patient Classification 2\NexusMarkersProcessed.mat' Properties.Writable: false
Methods
K>> m1.Properties.Source
ans =
\bontempi.medicine.utorad.utoronto.ca\home\PT\zabjeklab3\My Documents\Data\Active Projects\JC_Hip\FL1502\FL1502\Patient Classification 2\NexusMarkersProcessed.mat
K>> java.io.File(m1.Properties.Source).exists()
ans =
logical
0
Pause to paste in this window... go back:
java.io.File(m1.Properties.Source).exists()
ans =
logical
1
K>> who(m1)
Your variables are:
Patient10 Patient5 Patient9 Patient11 Patient6 Patient3
Patient7K>> who(m1) K>> who(m1) K>> java.io.File(m1.Properties.Source).exists()
ans =
logical
0
K>>
So it sometimes finds the file, and can read it in. Othertimes it cannot - is this to do with the fact that it's on a network drive?
Any help is appreciated.
matfile(filename)function assumes thefilenamerefers to a version 7.3 MAT-file. If you're saving with version 7 - useload(); when using version 7.3 - usematfile()if necessary. - Vladislav Martin"If you index into a variable in a Version 7 (the current default) or earlier MAT-file, MATLABĀ® warns and temporarily loads the entire contents of the variable.", so it would still work (if I'm interpreting that right). - user5128199