I'm trying to make a recursive list of files in an FTP directory.
While FileZilla deals with whitespaces in directory names with no problem, it seems that Labview struggles a bit.
Indeed, if I ask labview to get the files and directory of a folder named, for instance, /Projects/Camera 1/, it will return an empty array (while FileZilla clearly sees 12 files in this folder). It seems that the problem is the whitespace in the name because if I replace (using FileZilla) the space character with "_", LV correctly gives me the file list.
Any idea how to make the LabView FTP function correctly deal with whitespaces in directory and file names?
Solved! Go to Solution.
The %20 syntax is HTTP escaping. It will only work in a web browser (with FTP support) which will convert the HTTP escaping to proper FTP syntax. Have you tried to enclose the entire file path in double quotes ("/Projects/Camera 1/")?
Yep, i've tried enclosing the path with double quotes but it returns an empty file list.
What does work however is changing the current working directory (CWD) and then using the labview directory listing function with no file path. But it won't work with commands like /Projects/Camera 1/*.jpg.
What also work is using NLST instead of LIST (just modify a boolean in directory listing vi) but, with this function all files and directory are not correclty recognized and are detected as "link".
What also work is using MLSD but the reply string is not compatible with the one that LIST returns and hence, the reply string is not correclty parsed.
I think my best option is to go with MLSD and rewrite the parsing algorithm... but if someone as a better option, I'm all hears!
FYI, it works OK with the MLSD function.
That is very possible. I haven't checked the FTP RFC in a while. Most likely they added those new commands to accomodate these new things explicitedly. Doesn't have to mean that an FTP server couldn't support quoted paths with the standard commands, but that is a feature of your FTP server, not of the client you use to talk to the server. So LabVIEW can't do anything about this here. It is mainly a feature that your FTP server has to provide and there might be differences between different FTP servers.
I'm running into the same issue. The LIST command works with many FTP servers, but fails on some servers to return files and directories if the directory name contains spaces. Of the various work-arounds you describe, the MSLD command sounds like the best approach, since the others have limitations. You mentioned that you got that to work. Is there any chance you could share some code? From what see, the MSLD command isn't even supported in the low-level FTP functions LabVIEW supplies. I don't imagine it would be too hard to figure out how to implement it, using the existing commands as a guide. But if you've done it already, that would be even easier!
I put in a support request with NI when this happened. They pointed me toward your post. I'm going to suggest that they improve the FTP VI's that ship with LV to help address this. But it's not unlikely that the quickest solution will be if the community can provide one. If I am able to get MSLD (possibly with your help), I'll be glad to package it up into something that can be posted to the community.
Unfortunately, I can't share the code but here is a screenshot of what it looks like. It is based on the "directory listing vi" that is shipped with labview.
It basically send the MLSD command, and wait for the reply. After that, it's a matter of parsing the reply of the server which, on my FTP, looks like this:
type=cdir;sizd=3;modify=20150220090455;UNIX.mode=0705;UNIX.uid=32210;UNIX.gid=100;unique=d8g863beb0; . type=pdir;sizd=5;modify=20150302165245;UNIX.mode=0705;UNIX.uid=32210;UNIX.gid=100;unique=d8g863beae; .. type=dir;sizd=12;modify=20150302000236;UNIX.mode=0705;UNIX.uid=32210;UNIX.gid=100;unique=d8g863beb2; Camera pile 9