Michael
2004-12-01 20:38:11 UTC
Hello,
Not sure if this is the right message board but I have an interesting
problem.
Using Visual Studio .NET, C++, I want to write an all-encompassing C++
program to download new files from an FTP Server. The C++ program will
ftp to the server and download a list of files, match those files with
the ones I've already received, put together a new ftp script and
download.
I am using _popen to call FTP.
My problem is this, _popen calls ftp and pipes the output to a .txt
file, then the C++ program tried to open the .txt file and fails. It's
as if the C++ program is not waiting for the _popen to complete and
_popen still has the file open so my next statement to attempt opening
fails. Is there a way around this?
Here is a bit of my code:
// Call _popen and capture output for errors
FILE *pPipe;
char my_command[200];
sprintf(my_command,"ftp -v -i -s:%s >
%s",ftp_filename,output_filename);
if ((pPipe = _popen(my_command,"rt"))==NULL)
{
cout << "FTP FAILURE" << endl;
exit(1);
}
fclose(pPipe);
// Open Output File
sfile.open(output_filename,ios::in);
if(!sfile)
{
cout << "Could not open: " << output_filename << endl;
return -1;
}
The "if(!sfile)" is always TRUE, so the program fails.
Thanks in advance for the assistance!
Not sure if this is the right message board but I have an interesting
problem.
Using Visual Studio .NET, C++, I want to write an all-encompassing C++
program to download new files from an FTP Server. The C++ program will
ftp to the server and download a list of files, match those files with
the ones I've already received, put together a new ftp script and
download.
I am using _popen to call FTP.
My problem is this, _popen calls ftp and pipes the output to a .txt
file, then the C++ program tried to open the .txt file and fails. It's
as if the C++ program is not waiting for the _popen to complete and
_popen still has the file open so my next statement to attempt opening
fails. Is there a way around this?
Here is a bit of my code:
// Call _popen and capture output for errors
FILE *pPipe;
char my_command[200];
sprintf(my_command,"ftp -v -i -s:%s >
%s",ftp_filename,output_filename);
if ((pPipe = _popen(my_command,"rt"))==NULL)
{
cout << "FTP FAILURE" << endl;
exit(1);
}
fclose(pPipe);
// Open Output File
sfile.open(output_filename,ios::in);
if(!sfile)
{
cout << "Could not open: " << output_filename << endl;
return -1;
}
The "if(!sfile)" is always TRUE, so the program fails.
Thanks in advance for the assistance!