Ftp.exe über C ansteuern und datei schicken.

d0x

Cadet
Mitglied seit
14.05.2005
Beiträge
30
Renomée
0
Hallo,

kurzfassung meines Problems:
Ich habe 2 Dateien die über FTP verschickt werden sollen. Wenn die erste Datei nicht geschickt wurde, soll er die zweite Datei auch nicht schicken.

lösungsansatz
Man kann die FTP.exe über Befehle einer externen Datei steuern (diese lässt sich ja mit c anlegen). Da habe ich mir gedacht, dass ich eine Datei anlege die folgendes enthält:

------------------------------------------------------------------------------------------------------------

open Ftp ip
Username
Password
ascii
cd Verzeichnis
lcd locals verzeichnis
put quelname zielname
quit

------------------------------------------------------------------------------------------------------------
und diese hier gespeichert c:\Test\anweisung.ftp

Die kursiv geschriebnen sachen habe ich natürlich durch die richtigen werte ersetzt :)

Wenn man nun die ftp.exe wiefolgt ausführt, arbeitet die sie schritt für schritt die anweisungen der datei ab.

ftp.exe -s:c:\Test\anweisung.ftp

Das läuft auch soweit.
Das ganze kann man dann auch mit der anderen datei machen.


Warum das so nicht geht...

Ich muss ja irgendwie prüfen ob die Datei wirklich übertragen wurde. Man kann die ftp.exe auch so starten:

ftp -i -v -s:c:\Test\anweisung.ftp >NUL 2> ftpstat.txt // <- habe ich so gefunden
^ ^
unterdr&#252;ckt die Ausgabe speicherts irgendwie in die ftpstat

So denk ichs mir, aber genau kann ichs nicht versprechen das die erkl&#228;rung stimmt.

So wird die Bildschirmausgebe unterdr&#252;ckt und die Fehlermeldungen sollten in die ftpstat.txt geschrieben werden.

Folgender fall:
Der ftp server ist down oder antwortet nicht.
In dem Fall steht dann in der ftpstat.txt
Verbindung zum Remotehost fehlgeschlagen.
oder so &#228;hnlich.

Aber ist die datei einfach nur schreibgesch&#252;tzt, schreibt die ftp.exe keine fehlermeldung.

Jetzt seid ihr gefragt

Habt ihr eine l&#246;sungsidee wie ich testen kann ob die erste file &#252;bertragen wurde? oder wie ich mit r&#252;ckgabewerten der FTP.exe arbeiten kann? Oder bietet die MSDN Libray was passendes (ich hab nix gefunden bzw versteh die art wie man dort sucht nicht ganz *duck*;) )


Sorry f&#252;r den dicken post, ich dachte mir ich machs lieber ausf&#252;hrlich, und danke jedem der sich das ganze durchlie&#223;t

mfg d0x
 
Nimm doch das Win32-API.
Pseudocode (hab wenig Zeit):
Code:
HINTERNET hInet = InternetOpen(...);
if(hInet) {
  HINTERNET hFTPSession = InternetConnect(hInet, ..., INTERNET_SERVICE_FTP, ...);
  if(hFTPSession) {
    if(FtpSetCurrentDirectory(hFTPSession, ...)) {
      if(FtpPutFile(hFTPSession, File1, ...)) {
        if(FtpPutFile(hFTPSession, File2, ...)) {
          // all done
        } else {
          // could not upload file 2
        }
      } else {
        // could not upload file 1
      }
    } else {
      // could not change remote directory
    }
    InternetCloseHandle(hFTPSession);
  } else {
    // could not open FTP connection
  }
  InternetCloseHandle(hInet);
} else {
  // could not initialize WinInet
}
So ungefähr müsste das funktionieren.
 
m&#252;sste so gehen, hab mir auch nun mit deinen befehlen beispiele gegoogelt und die msdn durchst&#246;bert.

aber irgendwie kommt bei mir immer ein linkerfehler, egal was ich mache. Ich versuch jetzt mal einen anderen compiler....

und danke f&#252;r die schnelle antwort.


Edit: am Compiler liegt net.
 
Zuletzt bearbeitet:
Du musst die Wininet.lib einbinden.

Beim Microsoft-Compiler geht das bspw. so:
#pragma comment(lib, "wininet.lib")
 
Zurück
Oben Unten