Unable to load many files at once

Hi,
I've created a small video-editor using the matlab GUIDE. One of its functions is to load image files in order to convert them into a movie. Everything works fine, except that I cannot load more files than ~650 at the same time. Since I work with thousands of images, loading everything in batches of 600 is just annoying, and I figure I should be able to load all my files at once. I use the following code:
[cellFiles,pathvar] = uigetfile(...
filterSpec,...
'Pick a file','MultiSelect','on');
I guess the problem is that there is a limit to the size uigetfile can return, so I was wondering if anyone knows a way to circumvent this.
With kind regards, Jorrit Montijn

3 commentaires

Jan
Jan le 19 Sep 2011
Which Matlab version are you using? Do you get an error message?
Jorrit M
Jorrit M le 20 Sep 2011
I've got matlab version 7.11.0 (R2010b). I don't get an error message at the command window, but only a pop-up message stating:
pxyt01_t00654
File not found.
Please verify the correct file name was given.
Since there is no file with such a name in that directory, but there is a file with the name pxyt01_t00654_ch01.tif, I think the filenames are read in as a single string with delimiters between the files, and the string variable runs out of space around the 1308th file (654 times two, because I have two channels per frame). It's probably not that surprising that a variable can run out of space after 1308*(22 (file length) + 3 (two " around the file and a single space between files))= 32000+ characters. But still, it's annoying. I guess I could ask users to supply the first and last frames and load all files in-between as well, but that limits the loading functionality (you can't skip certain frames while loading).
Anyway, since there is not even a real matlab error, but a GUI window showing the message I'm afraid the problem lies with some hardcoded string limit that cannot be changed programmatically. However, any imputs are appreciated!
Jan
Jan le 20 Sep 2011
Which OS do you use?

Connectez-vous pour commenter.

Réponses (2)

Jan
Jan le 20 Sep 2011

0 votes

There is an undocumented function called "native_uigetfile" in Matlab 2009a under Windows. Is it available on your system and does it influence the problem?
Another idea is FEX: uipickfiles.

5 commentaires

Jorrit M
Jorrit M le 20 Sep 2011
I use windows XP, but native_uigetfile() does not exist (??? Undefined function or variable 'native_uitgetfile'.)
uipickfiles does solve the problem, but it seems to be somewhat buggy: I got 'waitfor' error while double clicking on a directory to open it. It's also pretty slow to respond. In other words: uipickfiles() does solve the problem, but I'd rather not incorporate a bulky, buggy subfunction into my program.
Any other suggestions?
Jan
Jan le 20 Sep 2011
Did you make a typo in the command window or while typing the comment? "native_uitgetfile" has one extra "t"...
I found this function by reading the source of uigetfile.m and its children. The non-native version of UIGETFILE uses a Java rouitne, whose buffers can be most likely influenced. Just ask Yair Altman.
Jorrit M
Jorrit M le 20 Sep 2011
You're right, I made a typo. But even without the typo native_uigetfile doesn't fix the problem: I still get the same message (so the cut-off point is exactly the same)
Maya Aviv
Maya Aviv le 12 Fév 2013
did you find a solution? since i have the same problem. i have to get more than 1000 files.
Jan
Jan le 12 Fév 2013
@Maya Aviv: Which OS do you use?

Connectez-vous pour commenter.

Sean de Wolski
Sean de Wolski le 12 Fév 2013

0 votes

Are you making sure to close the files when you are done with them? This is very important. The number of file handles is limited by the OS (i.e. not MATLAB) and if you open more than this you will see some of the most ridiculous behavior ever.
What is the output from:
hOpen = fopen('all');
This will tell you if you are not closing files when done with them. To close them use:
fclose(fid);
To close all of them:
fclose('all');

Catégories

En savoir plus sur App Building dans Centre d'aide et File Exchange

Question posée :

le 19 Sep 2011

Community Treasure Hunt

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

Start Hunting!

Translated by