C++中CopyFile、MoveFile的用法


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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM