C++中CopyFile、MoveFile的用法
阿新 • • 發佈:2018-11-30
1.含義
CopyFile(A, B, FALSE);表示將檔案A拷貝到B,如果B已經存在則覆蓋(第三引數為TRUE時表示不覆蓋)
MoveFile(A, B);表示將檔案A移動到B
2.函式原型
CopyFile:
#if defined(_M_CEE)
#undef CopyFile
__inline
BOOL
CopyFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName,
BOOL bFailIfExists
)
{
#ifdef UNICODE
return CopyFileW(
#else
return CopyFileA(
#endif
lpExistingFileName,
lpNewFileName,
bFailIfExists
);
}
#endif /* _M_CEE */
MoveFile:
#if defined(_M_CEE)
#undef MoveFile
__inline
BOOL
MoveFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName
)
{
#ifdef UNICODE
return MoveFileW(
#else
return MoveFileA(
#endif
lpExistingFileName,
lpNewFileName
);
}
#endif /* _M_CEE */
由函式原型可以看出,這兩個函式的前兩個輸入引數都為LRCWSTR型別,如果我們定義的是char*,記得轉換成LRCWSTR,否則會報錯;
另外,這兩個函式都返回一個bool型變數,表示執行成功與否,當目標位置路徑不存在時,會return 0
3.Demo
CopyFile:
#include <fstream>
#include <windows.h>
int main()
{
char *fn = "test.txt";
std::ofstream out(fn);
if (!out.is_open())
return 0;
out.close();
WCHAR buf[256];
memset(buf, 0, sizeof(buf));
MultiByteToWideChar(CP_ACP, 0, fn, strlen(fn) + 1, buf, sizeof(buf) / sizeof(buf[0]));
CopyFile(buf, L"../file/output.txt", FALSE);//FALSE:如果目標位置已經存在同名檔案,就覆蓋,return 1
//TRUE:如果目標位置已經存在同名檔案,則補拷貝,return 0
//後者路徑若不錯在,return 0
system("pause");
return 1;
}
MoveFile:
#include <fstream>
#include <windows.h>
int main()
{
char *fn = "test.txt";
std::ofstream out(fn);
if (!out.is_open())
return 0;
out.close();
WCHAR buf[256];
memset(buf, 0, sizeof(buf));
MultiByteToWideChar(CP_ACP, 0, fn, strlen(fn) + 1, buf, sizeof(buf) / sizeof(buf[0]));
MoveFile(buf, L"../file/output.txt");//FALSE:將前者移動到後者中(後者路徑若不錯在,return 0)
system("pause");
return 1;
}