Azzera filtri
Azzera filtri

Incorect output from the "fileparts" function

10 visualizzazioni (ultimi 30 giorni)
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 Commento
John Petersen
John Petersen il 28 Nov 2012
Modificato: John Petersen il 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.

Accedi per commentare.

Risposta accettata

Walter Roberson
Walter Roberson il 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 ':'

Più risposte (2)

Greg
Greg il 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 il 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 Commenti
Jan
Jan il 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 il 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.

Accedi per commentare.

Categorie

Scopri di più su Programming Utilities in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by