Problem with MATLAB "exist", returning 0, although the file actually exists!

35 views (last 30 days)
Hi, I am new to MATLAB and writing a code that will find out if any file of a particular name(say, C1_C0001_STR_1.dat) exists and then it will save the .dat file into a different folder.
I am trying to use exist but it is giving 0 as return , though I have manually searched and found it exists. I dont understand if it is a glitch of my computer or if there is any problem in the code.
Any help is highly appreciated. :)
  2 Comments
Stephen23
Stephen23 on 9 Aug 2017
Answer: there is a problem in your code.
Most likely you did not give the correct path, or the name is spelled incorrectly.
John D'Errico
John D'Errico on 9 Aug 2017
I'm guessing the file does exist, but it is not on your search path. Therefore MATLAB does not find it. Exist does not look everywhere on your drive, but only where you tell MATLAB to search. That is what the search path does.

Sign in to comment.

Accepted Answer

Stephen23
Stephen23 on 9 Aug 2017
Edited: Stephen23 on 9 Aug 2017
This will fix it:
D = 'D:\2nd year\C0001.tifroiSTR1';
S = dir(fullfile(D,'*.jpg'));
for k = 1:numel(S);
[~,name,ext] = fileparts(S(k).name);
filename = fullfile(D,[name,'.dat']);
end
The problem with your code starts on this line:
[filepath, basename, ext] = fileparts(filename);
because filename does not contain the path information at all (only the name of the file), then filepath will be empty and totally pointless. So when you construct the filepath again using fullfile using filepath there is no path... and MATLAB looks in the current directory (which is what you are telling MATLAB to do when there is no path). I fixed this by providing the path D to fullfile, just like you did with dir yourself.
The problem is a more general one though: beginners prefer to rely on what they imagine their computer is doing, or what they wish their computer is doing. But code does not care what is in your head, nor what you want it to do. It will do what it is written to do. And your job, if you want to learn how to write good code, is to look at what the code is doing: if you had looked at your variables (which is a very basic step in bugfixing) then you would have found your path information was missing.
  1 Comment
Titli
Titli on 9 Aug 2017
I can not thank you enough by just writing "thank you". I really needed someone to tell me to stop blaming my computer for everything and learn things properly! :D
It has helped me a lot !

Sign in to comment.

More Answers (2)

Jan
Jan on 9 Aug 2017
Edited: Jan on 9 Aug 2017
If exist() cannot find the file, it does not exist in the current folder and the folder of Matlab's path. It can be very tricky to use exist to check the existence of files, so please post the code you run. See https://www.mathworks.com/matlabcentral/answers/52705-test-existence-of-files-with-exist
Perhaps you specified the file without an absolute path name and the current folder is not what you expect it to be. Then do not use cd(), bit provide the complete path of the file instead.
  1 Comment
Titli
Titli on 9 Aug 2017
D='D:\2nd year\C0001.tifroiSTR1';
listings = dir(fullfile(D, '*.jpg'));
nfiles=length(listings);
for i=1:nfiles;
filename = listings(i).name;
[filepath, basename, ext] = fileparts(filename);
datfilename = fullfile( filepath, [basename '.dat']);
end
Here is the code!

Sign in to comment.


Star Strider
Star Strider on 9 Aug 2017
I always use the which (link) function to find files, since it returns the path as well. If the result is not empty (so isempty returns logical 0), the file exists. And you also have its path.

Categories

Find more on File Operations in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!