FTP was ist hier falsch?
-
Hallo leute
Hab mal wieder ein prob. Ich habe mir ne funktion gebaut die die version einer anwendung auf der lokalen platte mit einem update das auf einem FTP liegt vergleichen soll. jetzt das prob wenn ich in der anwendung auf prüfen klicke wird die verbindung aufgebaut doch kommt dann die messagebox "die verbindung konnte nicht hergestellt werden" doch is eine verbindung hergestellt worden. ich abe das mal auf meinem FTP getestet wo ich auch sehe ob da einer war und es ist 100%ig ne verbindung aufgebaut worden und auch der login ging super. was soll das sein?
void CUpdateDlg::OnStart() { // TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen UpdateData(true); m_Updated = ""; m_Release = ""; m_FileSize = ""; m_Duration = ""; char updated_version[50] = ""; char updated_release[50] = ""; char updated_filesize[50] = ""; char updated_duration[50] = ""; GetDlgItem(IDC_START)->EnableWindow(false); UpdateData(false); CInternetSession Session("Update-Session"); CFtpConnection* FTP; FTP = Session.GetFtpConnection("die ip", "user", "pass", NULL, false); CString strPath = GetCommandLine();// Pfad + Name der Exe holen int pos = strPath.ReverseFind( '\\'); // letztes '\' finden strPath = strPath.Mid(1, pos-1); // Name der Exe abtrennen, so dass nur noch der Pfad übrig bleibt CString strStatusPath; strStatusPath.Format("%s\\data\\status.txt", strPath); if (!FTP->GetFile("status.txt", strStatusPath, true, FILE_ATTRIBUTE_NORMAL, FTP_TRANSFER_TYPE_BINARY, 1)) //in der status.txt //stehen dann die Infos über die aktuelle Version; C:\status.txt ist nur temporär { MessageBox("Die Verbindung konnte nicht hergestellt werden.\n\nStellen Sie sicher, dass Sie über eine " "aktive Internet-Verbindung verfügen\nund / oder versuchen Sie es später noch einmal.", "Fehler", MB_ICONSTOP); delete FTP; Session.Close(); } else { ifstream file; file.open(strStatusPath, ios_base::in); file.getline(updated_version, 50); //aktuelleste verfügbare Version file.getline(updated_release, 50); //Release-Date file.getline(updated_filesize, 50); //Dateigröße file.getline(updated_duration, 50); //Dauer für Download bei 56K Modem file.close(); m_Updated = updated_version; //Daten anzeigen (in statics) m_Release = updated_release; m_FileSize = updated_filesize; m_Duration = updated_duration; UpdateData(false); if(strcmp(current_version, updated_version) == 0) //aktuelle Version, kein Update nötig { MessageBox("Sie nutzen die aktuellste Version von FCp1, ein Update ist \n\n N I C H T N O T W E N D I G.\n", "Vorgang beendet", MB_ICONINFORMATION); GetDlgItem(IDC_START)->EnableWindow(true); } else //Update empfehlenswert { MessageBox("Es liegt eine aktualisierte Version von FCp1 vor. Ein Update ist \n\n E M P F E H L E N S W E R T.", "Vorgang beendet", MB_ICONINFORMATION); GetDlgItem(IDC_START)->EnableWindow(true); } } //CFile cfile; //Datei löschen //cfile.Remove(strStatusPath); //Datei löschen }EDIT:
Code umgebrochen
-dEUs[ Dieser Beitrag wurde am 01.11.2002 um 00:25 Uhr von dEUs editiert. ]
-
Wie wärs wenn du erst mal nur den Code Teil Postest um den es eigentlich geht ?
Devil
-
Mmh, ich weiß nicht woran dein Problem liegt, aber was sagt den GetLastError dazu ??
-
@devil81
das is der teil des codes um den es geht.sorry ich verstehe jetzt erlich gesagt nich ganz was du damit meinst (GetLastError)?!
MfG Nico
-
Existiert die status.txt in dem verzeichnis auf deiner Platte schon?
Teste mal aus, was passiert, wenn du Parameter 3 von GetFile auf false änderst.bFailIfExists
Indicates whether the file name may already be used by an existing file. If the local file name already exists, and this parameter is TRUE, GetFile fails. Otherwise, GetFile will erase the existing copy of the file.
-
Sach mal, Nikolaus, das mit dem
"...Ich habe mir ne funktion gebaut..."
ist wohl nicht ganz die Wahrheit, gell? Der Quellcode kommt mit irgendwie so bekannt vor... Ist aber net so schlimm, ich hab mir eh einen besseren gebaut. Mit Statusanzeige, Fortschrittsbalken und Abbruch-Möglichkeit. Kann ihn dir ja schicken, wenn du willst. Oder soll ich ihn posten (seeehr lang!)?
Aber egal. Ich würd erst mal gucken, ob die "status.txt" auch wirklich genau in diesem Verzeichnis liegt. Vielleicht musst du ja noch einen Unterordner angeben. Und wenn das net geht, versuch mal den vollständigen Pfad. Also sowas wie "ftp://www.deine-hp.de/ordner/status.txt".
MP
-
GetLastError liefert erweiterte Informationen zu vorher passierten Fehlern.
Die MSDN erwähnt diese Funktion ebenfalls.