in datei schreiben ( nicht local )



  • char* pFileName = "ftp://xxx:xxx@www.meine-url.net/html/test/save.txt";
    

    Hat er doch schon längst (xxx:xxx@).

    Ich frage mich nur gerade, ob Funktionen wie std::ofstream out() auch FTP Pfade kennen bzw. verarbeiten können...

    Ich würde da lieber auf die WinINET-Fuktionen zurückgreifen (FtpPutFile, FtpOpenFile, FtpGetFile usw.)



  • Hm das mit den WinINET funktionen hatte ich mir auch überlegt nur kann ich damit doch nur das file hochladen oder ? Ich will ja ned immer das file hochladen sondern in nur EIN file reinschreiben...



  • MSDN schrieb:

    FtpPutFile can be used if the file already exists locally, while FtpOpenFile and InternetWriteFile can be used if data needs to be written to a file on the FTP server.

    Link dazu: hier!



  • ok das hat alles geklappt danke hepi

    jetzt hab ich das prob das er immer das vorhandene überschreibt kann man da noch was machen das er immer ans ende schreibt ?? oder muss ich erst den string in der datei einlesen den neuen dran hängen und dann neu schreiben ?



  • bekomm von getlasterror 997 Overlapped I/O operation is in progress. ERROR_IO_PENDING was heisst das ???

    Und nochwas ist sehr komisch wenn ich ne msgbox am ende öffne geht alles wunderbar sobal ich die msgbox rausnehme geht nix mehr 😕

    hoffe das kann mir einer erklären 🙂



  • Offenbar (wenn ich das richtig interpretiere 🤡 ) verwendest du OVERLAPPED - ohne MessageBox beendest du dann evtl. dein Programm, bevor die Schreib-Operation beendet wurde 😕



  • nö die msgbox beendet garnix war nur ne kontrolle um getlasterror auszugeben...

    aber ohne die schreib er nix hier mal mein code

    void getError()
    {
    	char *szBuf= new char[20];
    	DWORD dw = GetLastError();
    	sprintf(szBuf, "GetLastError returned %u", dw);
    	::MessageBox(NULL, szBuf, "Error", MB_OK); 
    }	
    
    		HINTERNET hInternet = InternetOpen("Mozilla/4.76 [en] (X11; Linux)", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, INTERNET_FLAG_ASYNC); 
    		HINTERNET hFtp = InternetConnect(hInternet, "www.meineurl.net", INTERNET_DEFAULT_FTP_PORT, "meinUserName", "meinPW", INTERNET_SERVICE_FTP, 0, 0); 
    		HINTERNET myFile = FtpOpenFile(hFtp,"/html/test/save.txt",GENERIC_WRITE,FTP_TRANSFER_TYPE_BINARY,0);
    		if(myFile == NULL)
    		{
    			getError();
    		}
    		else
    		{	
    			DWORD bytesWritten;
    			if(InternetWriteFile(myFile,strWrite,sizeof(strWrite),&bytesWritten))
    			{
    				::MessageBox(NULL,"done","OK",MB_OK);
    			}
    			else
    			{
    				getError();
    			}
    		}
    		InternetCloseHandle(myFile);
    		InternetCloseHandle(hFtp); 
    		InternetCloseHandle(hInternet);
    

    hoffe es hilft bei der lösung und evtl will ja einer auch mal sowas machen 🙂



  • Hallo,

    ein typischer Fehler, ersetze das Flag INTERNET_FLAG_ASYNC im InternetOpen-Aufruf durch 0, siehe dazu auch meine Erklärung hier:

    http://www.c-plusplus.net/forum/viewtopic.php?p=489992&highlight=internetopen#489992

    MfG



  • @spliphaa: Du solltest etwas genauer lesen 😉
    Ich hatte nicht geschrieben, dass die MessageBox irgendetwas beende, sondern dass dein Programm ohne die MessageBox (da du den asynchronen Modus verwendest) beendet wird, bevor der Befehl abgearbeitet ist 🕶



  • alles klar danke euch allen 🙂


Anmelden zum Antworten