64,683
社区成员
发帖
与我相关
我的任务
分享
char srcdir[256];
char desdir[256];
char cmdstr[1000];
strcpy(srcdir,"D:\\srcdir");
strcpy(desdir,"E:\\mydir\\desdir");
sprintf(cmd.str,"cmd /c echo D | xcopy /cherky \"%s\" \"%s\" >NUL",srcdir,desdir);
WinExec(cmdstr,SW_HIDE);
[/quote]
为什么我运行你这段代码报了100多个错。。直接停止编译了?是我的环境不对吗?[/quote]
新建Visual C++、Win32控制台空项目,设置使用多字节字符集,
#pragma warning(disable:4996)
#include <string.h>
#include <stdio.h>
#include <windows.h>
char srcdir[256];
char desdir[256];
char cmdstr[1000];
int main() {
strcpy(srcdir,"D:\\srcdir");
strcpy(desdir,"E:\\mydir\\desdir");
sprintf(cmdstr,"cmd /c echo D | xcopy /cherky \"%s\" \"%s\" >NUL",srcdir,desdir);
WinExec(cmdstr,SW_HIDE);
return 0;
}
char srcdir[256];
char desdir[256];
char cmdstr[1000];
strcpy(srcdir,"D:\\srcdir");
strcpy(desdir,"E:\\mydir\\desdir");
sprintf(cmd.str,"cmd /c echo D | xcopy /cherky \"%s\" \"%s\" >NUL",srcdir,desdir);
WinExec(cmdstr,SW_HIDE);
[/quote]
为什么我运行你这段代码报了100多个错。。直接停止编译了?是我的环境不对吗?
// 比较两个目录下的所有文件,并检测dst的更新时间是否与src相同,不同则更新
// 调用方式: NTSTATUS rtCr = CheckRefresh(L"D:\\新建文件夹\\1\\*.*", L"D:\\新建文件夹\\2", TRUE);
NTSTATUS CheckRefresh(LPCWSTR pathSrc, LPCWSTR pathDst, BOOL copyNotExist);
// cpp
#include "StdAfx.h"
#include "比较文件并更新.h"
// 比较两个目录下的所有文件,并检测dst的更新时间是否与src相同,不同则更新
NTSTATUS CheckRefresh(LPCWSTR pathSrc, LPCWSTR pathDst, BOOL copyNotExist)
{
if(!pathSrc || !pathDst)
return -__LINE__;
HANDLE hFindSrc = INVALID_HANDLE_VALUE;
WIN32_FIND_DATAW fndDataSrc;
// 检测目录是存大
hFindSrc = FindFirstFileW(pathDst, &fndDataSrc);
if ( INVALID_HANDLE_VALUE == hFindSrc)
return -__LINE__;
FindClose(hFindSrc);
hFindSrc = FindFirstFileW(pathSrc, &fndDataSrc);
if ( INVALID_HANDLE_VALUE == hFindSrc)
return -__LINE__;
//
long slashAt = -1;
for(long n=wcslen(pathSrc) -1; n >=0; n--)
{
if (pathSrc[n] == L'\\')
{
slashAt =n;
break;
}
}
if (slashAt <= 0)
return -__LINE__;
//
WCHAR* srcName = new WCHAR[MAX_PATH];
WCHAR* dstName = new WCHAR[MAX_PATH];
WCHAR* srcDir = new WCHAR[MAX_PATH];
__try
{
BOOL fndYet;
while(fndYet = FindNextFile(hFindSrc, &fndDataSrc))
{
if(fndDataSrc.cFileName[wcslen(fndDataSrc.cFileName) -1] == L'.')
continue;
WCHAR* at = fndDataSrc.cFileName;//wcsstr(fndDataSrc.cFileName, pathSrc);
if (!at)
return -__LINE__;
swprintf_s(dstName, MAX_PATH, L"%ws\\%ws", pathDst, at);
wcsncpy_s(srcName, MAX_PATH,pathSrc, slashAt+1);
wcscat_s(srcName, MAX_PATH,fndDataSrc.cFileName);
WIN32_FILE_ATTRIBUTE_DATA dstFData;
BOOL bGt = GetFileAttributesExW(dstName, GetFileExInfoStandard, &dstFData);
if (fndDataSrc.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (!bGt)
{
OutputDebugStringW(__FUNCTIONW__ L" CreateDirectoryW\n");
OutputDebugStringW(srcName);
OutputDebugStringW(dstName);
::CreateDirectoryW(dstName, NULL);
}
wcscpy_s(srcDir, MAX_PATH, srcName);
wcscat_s(srcDir, MAX_PATH, pathSrc + slashAt);
CheckRefresh(srcDir, dstName, copyNotExist);
}
else if (fndDataSrc.ftLastWriteTime.dwHighDateTime != dstFData.ftLastWriteTime.dwHighDateTime ||
fndDataSrc.ftLastWriteTime.dwLowDateTime != dstFData.ftLastWriteTime.dwLowDateTime
)
{
OutputDebugStringW(__FUNCTIONW__ L" copyIt File\n");
OutputDebugStringW(srcName);
OutputDebugStringW(dstName);
::CopyFileW(srcName, dstName, FALSE);
}
}
return __LINE__;
}__finally
{
FindClose(hFindSrc);
delete[] srcName;
delete[] dstName;
delete[] srcDir;
}
}
char srcdir[256];
char desdir[256];
char cmdstr[1000];
strcpy(srcdir,"D:\\srcdir");
strcpy(desdir,"E:\\mydir\\desdir");
sprintf(cmd.str,"cmd /c echo D | xcopy /cherky \"%s\" \"%s\" >NUL",srcdir,desdir);
WinExec(cmdstr,SW_HIDE);