004
25.09.2002, 19:57 Uhr
FloSoft
Medialer Over-Flow (Administrator)
|
hallo doch sicherlich, hab hier folgende Funktion:
(ist per CHttpConnection, aber das Prinzip müsste deutlich sein)
C++: |
BOOL GetHttpFile(CString strFile, CString *strUpdateFileContent) { if(!strUpdateFileContent) return 0;
DWORD connection = 0; CInternetSession *InternetSession = NULL;
if( InternetGetConnectedState(&connection,0) != 1) { return 0; }
try { InternetSession = new CInternetSession(); } catch (CInternetException *e) { return 0; }
if(InternetSession == NULL) { return 0; }
CString strDlPath = "http:/ /www.flo-soft.de.vu/files/" + strFile;
CStdioFile* pRemoteFile = NULL; CFile* pLocalFile = NULL;
char buffer[PACKET_SIZE]; CString strRemotePath = strDlPath; CString strLocalPath = "C:\\" + strFile; CString strTemp;
// lokale Datei falls vorhanden löschen DeleteFile(strLocalPath);
try { pRemoteFile = InternetSession->OpenURL((LPCSTR)strRemotePath,1,INTERNET_FLAG_TRANSFER_ASCII); } catch ( CInternetException *e) { InternetSession->Close(); return 0; }
if(pRemoteFile->m_hFile==NULL) { InternetSession->Close(); return 0; }
try { pLocalFile = new CFile(strLocalPath,CFile::modeCreate|CFile::modeWrite|CFile::typeBinary); } catch ( CFileException *e) { e->Delete(); InternetSession->Close(); return 0; }
LONG lRemoteLength = 0; LONG lCurrentLength = 0;
try { lRemoteLength = (LONG)pRemoteFile->SeekToEnd(); pRemoteFile->SeekToBegin(); } catch ( CInternetException *e) { InternetSession->Close(); return 0; }
double dRemoteLength = ( (double)lRemoteLength ) / 1024.0;
if(lRemoteLength-PACKET_SIZE < 0) { pRemoteFile->Read(buffer,lRemoteLength); strTemp = CString(buffer, lRemoteLength); strUpdateFileContent->Format("%s",strTemp); } else { while( (lCurrentLength + PACKET_SIZE) < lRemoteLength) { pRemoteFile->Read(buffer,PACKET_SIZE); strTemp = CString(buffer, PACKET_SIZE); strUpdateFileContent->Format("%s",strTemp); lCurrentLength += PACKET_SIZE; } } strTemp.Format("%s",strUpdateFileContent->GetBuffer(strUpdateFileContent->GetLength())); pLocalFile->Write(strTemp,lRemoteLength); pLocalFile->SetLength(lRemoteLength);
pRemoteFile->Close(); pLocalFile->Close();
return 1; }
|
In dem Pointer strUpdateFileContent ist dann der Inhalt der gelesenen datei ... Wenn du die Datei sendest würde ich an deiner stelle immer erst senden wie lang die datei ist ... -- class God : public ChuckNorris { }; Dieser Post wurde am 26.09.2002 um 12:15 Uhr von FloSoft editiert. |