With this program I can connect to any ftp server and edit files there. But if I load a bigger file and after that a smaller file, the smaller file only overwrites the beginning of bigger file.Code:#include <windows.h> #include <process.h> #include <wininet.h> #include <commctrl.h> #define FTP_FUNCTIONS_BUFFER_SIZE MAX_PATH+8 HINTERNET hFindFile,bay,say,file; HANDLE simple; HFONT hf; long lf; HDC hdc; DWORD car=0; char file_contents[1000000],empty[1000000],file_name[260],cserver[260],cuser[260],cpass[260],cdir[260],file_name2[260],lastopen[260]; HWND hwnd,dropdown,ava,kustuta,edit,salvesta,nimi,hStatus,conserver,conuser,conpass,condir,conb,a,b,c,d; TCHAR szFName[FTP_FUNCTIONS_BUFFER_SIZE]; void dconnect(void *P); void openfile(void *P); void dlistfiles(void *P); void savefile(void *P); void erase(void *P); int fan; WIN32_FIND_DATA FindFileData; char strFileName[260],test[260],tfile[260]; LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM); char szClassName[ ]="WindowsApp"; int WINAPI WinMain(HINSTANCE hThisInstance,HINSTANCE hPrevInstance, LPSTR lpszArgument,int nFunsterStil){ InitCommonControls(); MSG messages; WNDCLASSEX wincl; wincl.hInstance = hThisInstance; wincl.lpszClassName = szClassName; wincl.lpfnWndProc = WindowProcedure; wincl.style = CS_DBLCLKS; wincl.cbSize = sizeof (WNDCLASSEX); wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION); wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION); wincl.hCursor = LoadCursor (NULL, IDC_ARROW); wincl.lpszMenuName = NULL; wincl.cbClsExtra = 0; wincl.cbWndExtra = 0; wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND; if (!RegisterClassEx (&wincl)) return 0; hwnd=CreateWindowEx(0,szClassName,"FTPEditor",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT,644,492,HWND_DESKTOP,NULL,hThisInstance,NULL); DWORD dwStyle = GetWindowLong(hwnd, GWL_STYLE); dwStyle &= ~(WS_MAXIMIZEBOX|WS_MINIMIZEBOX); SetWindowLong(hwnd, GWL_STYLE, dwStyle); ShowWindow (hwnd, nFunsterStil); while (GetMessage (&messages, NULL, 0, 0)){ TranslateMessage(&messages); DispatchMessage(&messages); } return messages.wParam; } LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam){ switch (message){ case WM_CREATE: hdc = GetDC(NULL); lf = -MulDiv(12, GetDeviceCaps(hdc, LOGPIXELSY), 72); ReleaseDC(NULL,hdc); hf = CreateFont(lf, 0, 0, 0, FW_MEDIUM, FALSE, 0, 0, 0, 0, 0, 0, 0, "Times New Roman"); hStatus=CreateWindowEx(0,STATUSCLASSNAME,NULL,WS_CHILD|WS_VISIBLE, 0,0,0,0,hwnd,(HMENU)11445,GetModuleHandle(NULL),NULL); SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Ootan käsklusi..."); a=CreateWindowEx(0,"Static","Server:",WS_CHILD|WS_VISIBLE,10,20,50,30,hwnd,(HMENU)10001,GetModuleHandle(NULL),NULL); conserver=CreateWindowEx(0,"Edit","",WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,65,15,80,25,hwnd,(HMENU)10002,GetModuleHandle(NULL),NULL); b=CreateWindowEx(0,"Static","User:",WS_CHILD|WS_VISIBLE,150,20,70,30,hwnd,(HMENU)10003,GetModuleHandle(NULL),NULL); conuser=CreateWindowEx(0,"Edit","",WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,225,15,80,25,hwnd,(HMENU)10004,GetModuleHandle(NULL),NULL); c=CreateWindowEx(0,"Static","Pass:",WS_CHILD|WS_VISIBLE,310,20,70,30,hwnd,(HMENU)10005,GetModuleHandle(NULL),NULL); conpass=CreateWindowEx(0,"Edit","",WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL|ES_PASSWORD,385,15,80,25,hwnd,(HMENU)10006,GetModuleHandle(NULL),NULL); d=CreateWindowEx(0,"Static","Folder:",WS_CHILD|WS_VISIBLE,470,20,50,30,hwnd,(HMENU)10007,GetModuleHandle(NULL),NULL); condir=CreateWindowEx(0,"Edit","",WS_CHILD|WS_VISIBLE|WS_BORDER|ES_AUTOHSCROLL,525,15,80,25,hwnd,(HMENU)10008,GetModuleHandle(NULL),NULL); conb=CreateWindowEx(0,"Button","Connect",WS_CHILD|WS_VISIBLE|WS_BORDER|BS_PUSHBUTTON,290,55,60,25,hwnd,(HMENU)10009,GetModuleHandle(NULL),NULL); SendMessage(a,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(b,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(c,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(d,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(conb,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(condir,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(conpass,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(conuser,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(conserver,WM_SETFONT,(WPARAM)hf,TRUE); break; case 11122:{ DestroyWindow(a); DestroyWindow(b); DestroyWindow(c); DestroyWindow(d); DestroyWindow(conserver); DestroyWindow(conuser); DestroyWindow(conpass); DestroyWindow(condir); DestroyWindow(conb); nimi=CreateWindowEx(0,"Edit","",WS_BORDER|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL, 60,10,100,25,hwnd,(HMENU)25553,GetModuleHandle(NULL),NULL); dropdown=CreateWindowEx(0,"Combobox","", WS_BORDER|WS_VISIBLE|WS_CHILD|LBS_STANDARD|LBS_USETABSTOPS|CBS_AUTOHSCROLL, 170,10,150,200,hwnd,(HMENU)25554,GetModuleHandle(NULL),NULL); ava=CreateWindowEx(0,"Button","Open",WS_BORDER|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,340, 10,60,25,hwnd,(HMENU)25555,GetModuleHandle(NULL),NULL); salvesta=CreateWindowEx(0,"Button","Save",WS_BORDER|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,410, 10,80,25,hwnd,(HMENU)25556,GetModuleHandle(NULL),NULL); kustuta=CreateWindowEx(0,"Button","Delete",WS_BORDER|WS_VISIBLE|WS_CHILD|BS_PUSHBUTTON,500, 10,75,25,hwnd,(HMENU)25557,GetModuleHandle(NULL),NULL); edit=CreateWindowEx(0,"Edit","",WS_BORDER|WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL|ES_AUTOVSCROLL|ES_MULTILINE|WS_HSCROLL|WS_VSCROLL, 10,50,624,385,hwnd,(HMENU)25558,GetModuleHandle(NULL),NULL); SendMessage(hStatus,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(nimi,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(dropdown,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(ava,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(salvesta,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(kustuta,WM_SETFONT,(WPARAM)hf,TRUE); SendMessage(edit,WM_SETFONT,(WPARAM)hf,TRUE); _beginthread(dlistfiles,0,NULL); } case WM_COMMAND: switch(wParam){ case 25555: _beginthread(openfile,0,NULL); break; case 25556: _beginthread(savefile,0,NULL); break; case 25557: _beginthread(erase,0,NULL); break; case 10009: GetWindowText(conserver,cserver,260); GetWindowText(conuser,cuser,260); GetWindowText(conpass,cpass,260); GetWindowText(condir,cdir,260); _beginthread(dconnect,0,NULL); break; } break; case WM_SIZE: SetWindowPos(hwnd,0,0,0,644,492,SWP_NOMOVE|SWP_NOOWNERZORDER|SWP_SHOWWINDOW); break; case WM_DESTROY: PostQuitMessage(0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0; } void dconnect(void *P){ SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Oota... Ühendan"); bay=InternetOpen(0,INTERNET_OPEN_TYPE_DIRECT,0,0,0); say=InternetConnect(bay,cserver,INTERNET_DEFAULT_FTP_PORT,cuser,cpass,INTERNET_SERVICE_FTP,INTERNET_FLAG_TRANSFER_ASCII,0); if(say==NULL){ MessageBox(hwnd,"Couldn't connect!","Error",MB_OK); } else{ DestroyWindow(a); DestroyWindow(b); DestroyWindow(c); DestroyWindow(d); DestroyWindow(conserver); DestroyWindow(conuser); DestroyWindow(conpass); DestroyWindow(condir); DestroyWindow(conb); SendMessage(hwnd,11122,0,0); } SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Waiting for commands"); return; } void dlistfiles(void *P){ WaitForSingleObject(simple,INFINITE); SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Wait... Creating file list"); FtpSetCurrentDirectory(say,cdir); if(hFindFile){ InternetCloseHandle(hFindFile); } strcpy(strFileName,""); hFindFile = FtpFindFirstFile(say, "*.*", &FindFileData, INTERNET_FLAG_RELOAD, 0); if(hFindFile){ SendMessage(dropdown,CB_RESETCONTENT,0,0); if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY){ } else{ strcpy(strFileName,FindFileData.cFileName); SendMessage(dropdown,CB_ADDSTRING,0,(LPARAM)strFileName); } } while(InternetFindNextFile(hFindFile, &FindFileData)){ if((FindFileData.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY){ } else{ strcpy(strFileName,FindFileData.cFileName); SendMessage(dropdown,CB_ADDSTRING,0,(LPARAM)strFileName); } } SendMessage(dropdown,CB_SETCURSEL,0,0); InternetCloseHandle(hFindFile); if(file_name){ fan=(int)SendMessage(dropdown, CB_FINDSTRINGEXACT, -1, (LPARAM)file_name); if(fan!=CB_ERR){ SendMessage(dropdown,CB_SETCURSEL,(WPARAM)fan,0); } } SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Waiting for commands"); return; } void openfile(void *P){ SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Wait.. Opening file"); GetWindowText(dropdown,file_name,260); SetWindowText(nimi,file_name); strcpy(file_contents,""); car=0; SetWindowText(edit,""); file=FtpOpenFile(say,file_name,GENERIC_READ,FTP_TRANSFER_TYPE_ASCII,0); InternetReadFile(file,file_contents,1000000,&car); InternetCloseHandle(file); SetWindowText(edit,file_contents); strcpy(lastopen,file_name); SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Waiting for commands"); return; } void savefile(void *P){ SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Wait.. Saving file"); GetWindowText(nimi,file_name,1000000); GetWindowText(edit,file_contents,1000000); car=0; FtpDeleteFile(say,file_name); file=FtpOpenFile(say,file_name,GENERIC_WRITE,FTP_TRANSFER_TYPE_ASCII,0); InternetWriteFile(file,file_contents,strlen(file_contents),&car); InternetCloseHandle(file); strcpy(lastopen,file_name); _beginthread(dlistfiles,0,NULL); SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Waiting for commands"); } void erase(void *P){ if(MessageBox(hwnd,"Are you sure you want to delete this file?","Delete",MB_YESNO)==IDYES){ SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Wait.. Deleting file"); GetWindowText(dropdown,file_name2,260); FtpDeleteFile(say,file_name2); _beginthread(dlistfiles,0,NULL); if(strcmp(lastopen,file_name2)==0){ SetWindowText(nimi,""); SetWindowText(edit,""); } SendMessage(hStatus, SB_SETTEXT, 0, (LPARAM)"Waiting for commands"); } }