-
Problem with something
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");
}
}
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.
-
Tried different ways to reset variables etc...
-
You need to null terminate the returned string before use:
Code:
file=FtpOpenFile(say,file_name,GENERIC_READ,FTP_TR ANSFER_TYPE_ASCII,0);
InternetReadFile(file,file_contents,sizeof(file_contents) - 1,&car);
file_contents[car] = '\0';
Remember, that all content received over the network must be considered unreliable and potentially hostile.