| | |
FTP get (with wildcards) in Delphi?
![]() |
•
•
Join Date: Aug 2006
Posts: 999
Reputation:
Solved Threads: 1
I'm supposed to be writing a program to pick up files left in an ftp server directory. I have ftp access to the directory, and I have a copy of the Indy pack components installed on my system. However, I'm running into a problem.
The files I'm supposed to be picking up don't have static names. That is, each file is in the format XX-YY-ZZ.csv, where XX and ZZ are constant, but YY is variable. I don't mean simply that it can change, I mean that it's determined on the other side by something I can't predict...in this case, the YY portion of the filename is the timestamp at which the file was created, as far as I can understand the spec sheet I'm working off of.
As I said, I can't predict the value of the timestamp portion of the filenames. As a result, I'm having trouble trying to figure out how to get the files downloaded. As far as I can tell, the Indy component TIdFTP's 'get' functionality won't allow wildcards, and I can't think of any other way to get the files I'm supposed to retrieve.
I have several questions regarding this:
1 .Does anyone know whether or not the TIdFTP component has functionality for the mget command? I know it's possible to give the mget a wildcarded target, but I haven't seen anything in the method list for the component that looks like mget. Am I just looking under the wrong name?
2. If the TIdFTP component can't handle an mget or a wildcarded get statement, could someone recommend another FTP component that can handle one of these options?
3. If there are no reasonable ways to get this done in Delphi, would someone please recommend another programming language it might be easier to do this in?
Thank you for your consideration.
The files I'm supposed to be picking up don't have static names. That is, each file is in the format XX-YY-ZZ.csv, where XX and ZZ are constant, but YY is variable. I don't mean simply that it can change, I mean that it's determined on the other side by something I can't predict...in this case, the YY portion of the filename is the timestamp at which the file was created, as far as I can understand the spec sheet I'm working off of.
As I said, I can't predict the value of the timestamp portion of the filenames. As a result, I'm having trouble trying to figure out how to get the files downloaded. As far as I can tell, the Indy component TIdFTP's 'get' functionality won't allow wildcards, and I can't think of any other way to get the files I'm supposed to retrieve.
I have several questions regarding this:
1 .Does anyone know whether or not the TIdFTP component has functionality for the mget command? I know it's possible to give the mget a wildcarded target, but I haven't seen anything in the method list for the component that looks like mget. Am I just looking under the wrong name?
2. If the TIdFTP component can't handle an mget or a wildcarded get statement, could someone recommend another FTP component that can handle one of these options?
3. If there are no reasonable ways to get this done in Delphi, would someone please recommend another programming language it might be easier to do this in?
Thank you for your consideration.
"No trees were harmed in the production of this post. However, several electrons were severely inconvenienced."
Kumquat.
Kumquat.
i found a workaround using idftp capabilities
i needed a way to ftp numerous files for edi.
the filenames aren't standardized, so i came up
with this approach...
basically, i dump the listresult in a memo component
and use the line text in the memo to perform a pseudo mget
in my situation i needed to get several files from one server,
archive them to a different directory on that server, and append all the
files to a single file for a different server.
idftp2 is the host server
idftp1 is the receiving server
hope this helps ...
[code]
i needed a way to ftp numerous files for edi.
the filenames aren't standardized, so i came up
with this approach...
basically, i dump the listresult in a memo component
and use the line text in the memo to perform a pseudo mget
in my situation i needed to get several files from one server,
archive them to a different directory on that server, and append all the
files to a single file for a different server.
idftp2 is the host server
idftp1 is the receiving server
hope this helps ...
[code]
Pascal and Delphi Syntax (Toggle Plain Text)
procedure TForm1.Button3Click(Sender: TObject); var AFiles : TStringList; stroll : integer; parse : integer; chop : integer; trucount : integer; edifile : string; stamped : string; stampfile : string; begin {perform the inbound inquery} with idftp2 do begin sql_memo.Clear; Afiles := TStringList.Create; disconnect; connect(true); changedir('/elvis/sandwich/company'); List(AFiles,'945.*',true); sql_memo.Lines.Addstrings(listresult); Disconnect; end; trucount:= 0; with sql_memo do begin for stroll:=0 to lines.Count-1 do begin if pos('945.',lines[stroll]) > 0 then begin trucount:=trucount+1; end; end; end; if trucount > 0 then begin {secure and trim the filenames} with sql_memo do begin for stroll:=0 to lines.Count-1 do begin if pos('945.',lines[stroll]) > 0 then begin parse:=pos('945.',lines[stroll]); chop:=length(lines[stroll]); lines[stroll]:=copy(lines[stroll],parse,chop-parse+1); end; end; end; {ftp 'get' the filenames} with sql_memo do begin idftp2.connect(true); idftp2.changedir('/elvis/sandwich/company'); for stroll:=0 to lines.count-1 do begin edifile:=lines[stroll]; idftp2.Get(edifile,'c:\home\'+edifile); idftp2.Delete(edifile); end; idftp2.disconnect; end; {attempt to mirror the the standardized filename 945in.YYMMDDhhnn} {stamped:=formatdatetime('yymmddhhnnsszzz',now); } {ftp 'put' to archive the filenames} with sql_memo do begin idftp2.connect(true); idftp2.changedir('/elvis/sandwich/archive/company'); for stroll:=0 to lines.count-1 do begin stamped:=formatdatetime('yymmddhhnnsszzz',now); edifile:=lines[stroll]; stampfile:='945in.'+stamped; idftp2.put('c:\home\'+edifile,stampfile,false); end; idftp2.disconnect; end; {now reverse this but append the files into 945xxx.txt} with sql_memo do begin idftp1.connect(true); idftp1.changedir('/company/ediin'); for stroll:=0 to lines.count-1 do begin edifile:=lines[stroll]; idftp1.put('c:\home\'+edifile,'945xxx.txt',true); end; edifile:='945xxx.txt'; idftp1.Get(edifile,'c:\home\'+edifile); idftp1.disconnect; end; end; {end of trucount condition} end;
![]() |
Similar Threads
- Upload a file to a ftp server using delphi (Pascal and Delphi)
- FTP Delivery Client (Pascal and Delphi)
- Tek's FTP (Networking Hardware Configuration)
Other Threads in the Pascal and Delphi Forum
- Previous Thread: I need help on audio encoding and accessing freeDB.
- Next Thread: Debug an Exe from other Exe which loads it in Delphi7
Views: 4848 | Replies: 2
| Thread Tools | Search this Thread |
Tag cloud for Pascal and Delphi





