:confused: Кто-нибудь, подскажите, как в Delphi 7 отправить файл на ftp сервер
там есть инди компоненты, с их помощью это сделать крайне легко... у меня есть исходник, но под билдером
Да, я знаю про эти компоненты. Но если ты не против, я хотела бы посмотреть твой исходник, пусть и на билдере. Я пишу в Delphi, но видимо я где то допустила ошибку, может посмотришь?
Вот, без всяких компонентов. Работает в Винде и в Линуксе:
Код:
void sendFTP(String ftp_host, String ftp_user, String ftp_pass){FILE *ff = fopen("ftp_command.txt","w");ftp_user.Cat("");if(fputs(ftp_user, ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs(ftp_user, ff)");}ftp_pass.Cat("");if(fputs(ftp_pass, ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs(ftp_pass, ff)");}String filename = "data.xml";String strMessage = NFormat("send %s", filename);if(fputs(strMessage, ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs(strMessage, ff)");}if(fputs("quit", ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs("quit", ff)");}fclose(ff);strMessage = NFormat("ftp -s:%s %s", "ftp_command.txt", ftp_host);UINT dw = WinExec(m_strMessage, SW_SHOW/*SW_HIDE*/);}
Код:
#include <stdlib.h>#include <stdio.h>#include <sysstat.h>ну вот такой есть вариант отправки... живой... из рабочей программы:void __fastcall TMainForm::LoadLog2Server(){ AnsiString InMass[512]; struct ffblk ffblk; int Index = 0; for(int i = 0; i < 512; i++) InMass[i] = ""; AnsiString S = Application->ExeName.SubString(1, Application->ExeName.LastDelimiter("\") - 1); TIniFile *inFile = new TIniFile(S + "\Setup.ini"); TIdFTP* FTP = new TIdFTP(NULL); FTP->Host = inFile->ReadString("NETSRV", "FTP_IP", "10.30.10.14"); FTP->User = inFile->ReadString("NETSRV", "FTP_USER", "naryad"); FTP->Password = inFile->ReadString("NETSRV", "FTP_PWD", "hf,jnfcyfhzlfvb"); delete inFile; AnsiString Src = Application->ExeName.SubString(1, Application->ExeName.LastDelimiter("\")); try{ if(FileExists(Src + "Log\" + "*.log")){ AnsiString Adr = Src + "Log\" + "*.log"; int done = findfirst(Adr.c_str(), &ffblk, 0); InMass[0] = AnsiString(ffblk.ff_name); Index++; while(!done){ done = findnext(&ffblk); InMass[Index] = AnsiString(ffblk.ff_name); if(InMass[Index] == InMass[Index - 1]){ InMass[Index] = ""; break; } Index++; } FTP->Connect(true); try{ FTP->ChangeDir("Log"); }catch(...){ FTP->MakeDir("Log"); FTP->ChangeDir("Log"); } try{ FTP->MakeDir(User->Login); }catch(...){} FTP->ChangeDir(User->Login); for(int i = 0; i < Index; i++){ FTP->Put(Src + "Log\" + InMass[i], InMass[i], false); } } }catch(...){} FTP->Disconnect(); delete FTP;}
Сообщение от Redis
Вот, без всяких компонентов. Работает в Винде и в Линуксе:
Код:
void sendFTP(String ftp_host, String ftp_user, String ftp_pass){FILE *ff = fopen("ftp_command.txt","w");ftp_user.Cat("");if(fputs(ftp_user, ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs(ftp_user, ff)");}ftp_pass.Cat("");if(fputs(ftp_pass, ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs(ftp_pass, ff)");}String filename = "data.xml";String strMessage = NFormat("send %s", filename);if(fputs(strMessage, ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs(strMessage, ff)");}if(fputs("quit", ff)<0){WriteInLogFile("!XML_LOG.txt","Error - fputs("quit", ff)");}fclose(ff);strMessage = NFormat("ftp -s:%s %s", "ftp_command.txt", ftp_host);UINT dw = WinExec(m_strMessage, SW_SHOW/*SW_HIDE*/);}
прикольно... надо будет списать сей способ...