VC++文件操作,获取文件属性信息,判断文件是否存在,移动和拷贝文件

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

使用FindFirstFile()函数得到文件信息

HANDLE FindFirstFileA(
  [in]  LPCSTR             lpFileName,
  [out] LPWIN32_FIND_DATAA lpFindFileData
);

WIN32_FIND_DATA结构
包含有关 FindFirstFile、 FindFirstFileEx 或 FindNextFile 函数找到的文件的信息。

typedef struct _WIN32_FIND_DATAW {
  DWORD    dwFileAttributes;
  FILETIME ftCreationTime;
  FILETIME ftLastAccessTime;
  FILETIME ftLastWriteTime;
  DWORD    nFileSizeHigh;
  DWORD    nFileSizeLow;
  DWORD    dwReserved0;
  DWORD    dwReserved1;
  WCHAR    cFileName[MAX_PATH];
  WCHAR    cAlternateFileName[14];
  DWORD    dwFileType; // Obsolete. Do not use.
  DWORD    dwCreatorType; // Obsolete. Do not use
  WORD     wFinderFlags; // Obsolete. Do not use
} WIN32_FIND_DATAW, *PWIN32_FIND_DATAW, *LPWIN32_FIND_DATAW;
成员
dwFileAttributes

文件的文件属性。

有关可能的值及其说明请参阅 文件属性常量。

如果文件的任何流都稀疏则会设置文件上的 FILE_ATTRIBUTE_SPARSE_FILE 属性。

ftCreationTime

一个 FILETIME 结构指定创建文件或目录的时间。

如果基础文件系统不支持创建时间则此成员为零。

ftLastAccessTime

FILETIME 结构。

对于文件结构指定上次读取文件、写入可执行文件或可执行文件时运行。

对于目录结构指定创建目录时。 如果基础文件系统不支持上次访问时间则此成员为零。

在 FAT 文件系统中文件和目录的指定日期正确但一天的时间始终设置为午夜。

ftLastWriteTime

FILETIME 结构。

对于文件结构指定上次写入、截断或覆盖文件时例如使用 WriteFile 或 SetEndOfFile 时。 更改文件属性或安全描述符时日期和时间不会更新。

对于目录结构指定创建目录时。 如果基础文件系统不支持上次写入时间则此成员为零。

nFileSizeHigh

文件大小的高顺序 DWORD 值以字节为单位。

此值为零除非文件大小大于 MAXDWORD。

文件的大小等于 (nFileSizeHigh * (MAXDWORD+1) ) + nFileSizeLow。

nFileSizeLow

文件大小的低序 DWORD 值以字节为单位。

dwReserved0

如果 dwFileAttributes 成员包含 FILE_ATTRIBUTE_REPARSE_POINT属性 则此成员指定重新分析点标记。

否则此值未定义不应使用。

有关详细信息请参阅 重新分析点标记。

IO_REPARSE_TAG_CSV (0x80000009)
IO_REPARSE_TAG_DEDUP (0x80000013)
IO_REPARSE_TAG_DFS (0x8000000A)
IO_REPARSE_TAG_DFSR (0x80000012)
IO_REPARSE_TAG_HSM (0xC0000004)
IO_REPARSE_TAG_HSM2 (0x80000006)
IO_REPARSE_TAG_MOUNT_POINT (0xA0000003)
IO_REPARSE_TAG_NFS (0x80000014)
IO_REPARSE_TAG_SIS (0x80000007)
IO_REPARSE_TAG_SYMLINK (0xA000000C)
IO_REPARSE_TAG_WIM (0x80000008)
dwReserved1

保留供将来使用。

cFileName[MAX_PATH]

文件的名称。

cAlternateFileName[14]

文件的备用名称。

此名称采用经典 8.3 文件格式。

dwFileType

已过时。 请勿使用。

dwCreatorType

已过时。 请勿使用。

wFinderFlags

已过时。 请勿使用。

对于FILETIME结构体转化成SYSTEMTIME便于读取使用FileTimeToSystemTime函数进行转换
将文件时间转换为系统时间格式。 系统时间基于协调世界时 (UTC)

BOOL FileTimeToSystemTime(
  [in]  const FILETIME *lpFileTime,
  [out] LPSYSTEMTIME   lpSystemTime
);
参数
[in] lpFileTime

指向 FILETIME 结构的指针其中包含要转换为系统 (UTC) 日期和时间格式的文件时间。

此值必须小于0x8000000000000000。 否则该函数将失败。

[out] lpSystemTime

指向 SYSTEMTIME 结构的指针用于接收转换的文件时间。

返回值
如果该函数成功则返回值为非零值。

如果函数失败则返回值为零。 要获得更多的错误信息请调用 GetLastError。

SYSTEMTIME
指定日期和时间使用月份、日、年、工作日、小时、分钟、秒和毫秒的单个成员。 时间是协调世界时 (UTC) 或本地时间具体取决于调用的函数。

typedef struct _SYSTEMTIME {
  WORD wYear;
  WORD wMonth;
  WORD wDayOfWeek;
  WORD wDay;
  WORD wHour;
  WORD wMinute;
  WORD wSecond;
  WORD wMilliseconds;
} SYSTEMTIME, *PSYSTEMTIME, *LPSYSTEMTIME;
成员
wYear

年。 此成员的有效值为 160130827。

wMonth

月份。 此成员可以是以下值之一。

Value	含义
1
12
23
34
45
56
67
78
89
910
1011
1112
12 月
wDayOfWeek

星期几。 此成员可以是以下值之一。

Value	含义
0
星期日
1
星期一
2
星期二
3
星期三
4
星期四
5
星期五
6
星期六
wDay

每月的日期。 此成员的有效值为 131。

wHour

小时。 此成员的有效值为 023。

wMinute

分钟。 此成员的有效值为 059。

wSecond

秒钟。 此成员的有效值为 059。

wMilliseconds

毫秒。 此成员的有效值为 0999

从文件获取属性和最后修改时间信息

	WIN32_FIND_DATA fileData;
	HANDLE hFindFile = FindFirstFile("D:\\1.txt",&fileData);
	FindClose(hFindFile);
	FILETIME fileTime = fileData.ftLastWriteTime;
	SYSTEMTIME sysTime;
	FileTimeToSystemTime(&fileTime,&sysTime);
	printf("文件的最后修改时间为%04d-%02d-%02d %02d:%02d:%02d\n",sysTime.wYear,sysTime.wMonth,sysTime.wDay,sysTime.wHour+8,sysTime.wMinute,sysTime.wSecond);

通过FindFirstFile返回值可判断文件是否存在dwFileAttributes表示文件属性通过dwFileAttributes变量判断是否是目录或者普通文件


		WIN32_FIND_DATA fileData;
		HANDLE hFindFile = FindFirstFile("D:\\bg11.jpg",&fileData);
		if(INVALID_HANDLE_VALUE == hFindFile){
			printf("不存在该文件或目录\n");
		}else if(fileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){
			printf("%s是一个目录\n",fileData.cFileName);
		}else{
			printf("%s是一个文件\n",fileData.cFileName);
		}
		FindClose(hFindFile);

将现有文件复制到新文件。

BOOL CopyFile(
  [in] LPCTSTR lpExistingFileName,
  [in] LPCTSTR lpNewFileName,
  [in] BOOL    bFailIfExists
);
参数
[in] lpExistingFileName

现有文件的名称。

在此函数的 ANSI 版本中名称限制为 MAX_PATH 个字符。 若要将此限制扩展到 32767 宽字符请调用函数的 Unicode 版本并将“\”追加到路径。 有关详细信息请参阅 命名文件。

提示从 Windows 10 版本 1607 开始对于此函数的 unicode 版本 (CopyFileW) 可以选择加入以删除MAX_PATH限制而无需追加“\\\”。 有关详细信息请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
 
如果 lpExistingFileName 不存在 CopyFile 将失败 GetLastError 将返回 ERROR_FILE_NOT_FOUND。
[in] lpNewFileName

新文件的名称。

在此函数的 ANSI 版本中名称限制为 MAX_PATH 个字符。 若要将此限制扩展到 32767 宽字符请调用函数的 Unicode 版本并将“\”追加到路径。 有关详细信息请参阅 命名文件。

提示从 Windows 10 版本 1607 开始对于此函数的 unicode 版本 (CopyFileW) 可以选择加入以删除MAX_PATH限制而无需追加“\\\”。 有关详细信息请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
 
[in] bFailIfExists

如果此参数为 TRUE 并且 lpNewFileName 指定的新文件已存在则函数将失败。 如果此参数为 FALSE 且新文件已存在则函数将覆盖现有文件并成功。

返回值
如果该函数成功则返回值为非零值。

如果函数失败则返回值为零。 要获得更多的错误信息请调用 GetLastError。

移动现有文件或目录包括其子级。

BOOL MoveFile(
  [in] LPCTSTR lpExistingFileName,
  [in] LPCTSTR lpNewFileName
);
参数
[in] lpExistingFileName

本地计算机上的文件或目录的当前名称。

在此函数的 ANSI 版本中名称限制为 MAX_PATH 个字符。 若要将此限制扩展到 32767 宽字符请调用函数的 Unicode 版本并将“\”追加到路径。 有关详细信息请参阅 命名文件。

提示从Windows 10版本 1607 开始对于此函数的 unicode 版本 (MoveFileW) 你可以选择加入以删除MAX_PATH限制而无需附加“\\\”。 有关详细信息请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
 
[in] lpNewFileName

文件或目录的新名称。 新名称不得已存在。 新文件可能位于不同的文件系统或驱动器上。 新目录必须位于同一驱动器上。

在此函数的 ANSI 版本中名称限制为 MAX_PATH 个字符。 若要将此限制扩展到 32767 宽字符请调用函数的 Unicode 版本并将“\”追加到路径。 有关详细信息请参阅 命名文件。

提示从Windows 10版本 1607 开始对于此函数的 unicode 版本 (MoveFileW) 你可以选择加入以删除MAX_PATH限制而无需附加“\\\”。 有关详细信息请参阅 命名文件、路径和命名空间 的“最大路径长度限制”部分。
 
返回值
如果该函数成功则返回值为非零值。

如果函数失败则返回值为零。 要获得更多的错误信息请调用 GetLastError。

拷贝"D:\bg1.jpg"到"D:\bg2.jpg"

CopyFile("D:\\bg1.jpg","D:\\bg2.jpg",true);

移动"D:\bg2.jpg"到"D:\bg3.jpg"

MoveFile("D:\\bg2.jpg","D:\\bg3.jpg");
阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: c++

“VC++文件操作,获取文件属性信息,判断文件是否存在,移动和拷贝文件” 的相关文章