Incorect output from the "fileparts" function

9 views (last 30 days)
Hi everyone
Here is a quick shot of my current problem:
I simply don't understand why the following commands:
Filename = 'Animation_28-Nov-2012 01:06:20_.avi';
[pathstr, baseFile, extProvided ] = fileparts(Filename);
are giving the following results:
pathstr = Animation_28-Nov-2012 01:06:\
baseFile = 20_
extProvided = .avi
Indeed, as you can notice, after the second ":" character is added a "\" which is interpreted as the file path of the file.
Why is there a "\" character ?! I simply don't understand. I tried to go through the help file but without any success.
Any idea would be very helpful, thank you for your help.
  1 Comment
John Petersen
John Petersen on 28 Nov 2012
Edited: John Petersen on 28 Nov 2012
What OS are you using? Windows doesn't allow colons (:) in the filename. So it seems that fileparts understands the text up to the last : to be the path and the rest of the string to be the filename.

Sign in to comment.

Accepted Answer

Walter Roberson
Walter Roberson on 28 Nov 2012
In MS Windows, colons in filenames indicate device prefixes.
You can read the source code for fileparts. When executing on MS Windows, if there is no / or \ in the name, then the path is considered to extend to the last ':'

More Answers (2)

Greg
Greg on 28 Nov 2012
Oooookay well done guys. Indeed this code was executed on Windows 7.
For the record I simply added this line before, in order to clean "Filename":
Filename = regexprep(Filename,'[: ]','-');
Thanks for all your answers and comments guys!

per isakson
per isakson on 28 Nov 2012
Windows 7 help says:
Which characters can't be used in a file name?
You can't use any of the following characters in a file name: \ / ? : * " > < |
However, on a Windows system it is possible to create files, with invalid names. Don't ask me how, but I know because I get such files sent to me.
Obviously, filepart doesn't check for the validity of the file name.
  2 Comments
Jan
Jan on 28 Nov 2012
While "C:\" is the disk C, "C:" is the current folder on the disk C. Therefore Matlab appends a backslash after a colon.
You can create invalid filenames using the low-level functions. The most ugly way is to write directly in the name table of the file system. It's like using a MEX function to create field names like the empty string or a space. It works using dynamic field names: "S.('')", but of course Matlab is driven out of its specifications and crashs must be expected.
Daniel Shub
Daniel Shub on 28 Nov 2012
I think these limitations are due to Windows and not the filesystem (NTFS). I am pretty sure if I mount an NTFS filesystem with Linux I can create these "invalid" names pretty easily.

Sign in to comment.

Categories

Find more on Programming Utilities in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!