在编程中,针对磁盘与目录的操作也是非常重要的,本章将重点介绍如何实现针对文件目录与磁盘的操作方法,其中包括了删除文件,文件拷贝,文件读写,目录遍历输出,遍历磁盘容量信息,磁盘格式化,输出分区表数据,监控目录变化等。
11.1 CopyFile
CopyFile 函数,用于将一个文件从一个位置复制到另一个位置,该函数原型为:
BOOL CopyFile(
LPCWSTR lpExistingFileName,
LPCWSTR lpNewFileName,
BOOL bFailIfExists
);
其中,lpExistingFileName
表示要复制的文件名,lpNewFileName
表示复制后的新文件名,bFailIfExists
表示如果新文件名已经存在是否覆盖。如果成功复制文件,则返回非零值。如果失败,则返回零。
#include <iostream>
#include <Windows.h>
// 判断是否为目录
BOOL isDirectory(char* path)
{
WIN32_FIND_DATA fd;
BOOL rel = FALSE;
char* p = path;
// 查找到第一个文件的句柄
HANDLE hFind = FindFirstFile(path, &fd);
while (*p != '\0') p++;
// 如果结尾是这两种符号就肯定是目录
if (*(--p) == '\\' || *(p) == ' / ')
{
*p = '\0';
return TRUE;
}
// 判断是否获取错误
if (hFind != INVALID_HANDLE_VALUE)
{
// 文件信息按位与上目录属性, 非目录则全部置零
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
rel = TRUE;
}
// 关闭查找句柄
FindClose(hFind);
}
return rel;
}
int main(int argc, char* argv[])
{
char file_src[MAX_PATH] = { 0 };
char file_dest[MAX_PATH] = { 0 };
strcpy(file_src, "d://lyshark.exe");
strcpy(file_dest, "d://");
if (isDirectory(file_dest))
{
// 如果第二个参数是目录,则拼装新的文件路径
sprintf(file_dest, "%s\\%s", file_dest, file_src);
}
if (CopyFile(file_src, file_dest, 0) == 0)
{
printf("文件复制失败 \n");
}
else
{
printf("文件已复制 \n");
}
system("pause");
return 0;
}
11.2 MoveFile
MoveFile 函数,用于将文件从一个位置移动到另一个位置,该函数可以用于重命名文件或将文件从一个目录移动到另一个目录。如果要在同一目录中重命名文件,可以将文件的新名称作为 lpNewFileName
参数提供,而 lpExistingFileName
参数应保持不变。如果要移动文件到另一个目录,可以提供新目录的路径和名称作为 lpNewFileName
参数,该函数原型如下所示;
BOOL MoveFile(
LPCTSTR lpExistingFileName,
LPCTSTR lpNewFileName
);
其中,lpExistingFileName
是要移动的文件的完整路径和名称,lpNewFileName
是文件的新路径和名称。如果文件成功移动,则函数返回非零值,否则返回零,读者需要注意,该函数只能移动文件,无法移动文件夹。如果要移动文件夹,可以使用 MoveFileEx()
函数。
#include <iostream>
#include <Windows.h>
// 判断是否为目录
BOOL isDirectory(char* path)
{
WIN32_FIND_DATA fd;
BOOL rel = FALSE;
char* p = path;
// 查找到第一个文件的句柄
HANDLE hFind = FindFirstFile(path, &fd);
while (*p != '\0') p++;
// 如果结尾是这两种符号就肯定是目录
if (*(--p) == '\\' || *(p) == ' / ')
{
*p = '\0';
return TRUE;
}
// 判断是否获取错误
if (hFind != INVALID_HANDLE_VALUE)
{
// 文件信息按位与上目录属性, 非目录则全部置零
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
rel = TRUE;
}
// 关闭查找句柄
FindClose(hFind);
}
return rel;
}
int main(int argc, char* argv[])
{
char file_src[MAX_PATH] = { 0 };
char file_dest[MAX_PATH] = { 0 };
strcpy(file_src, "d://lyshark.exe");
strcpy(file_dest, "d://lyshark");
if (isDirectory(file_dest))
{
// 如果第二个参数是目录, 则拼装新的文件路径
sprintf(file_dest, "%s\%s", file_dest, file_src);
}
if (MoveFile(file_src, file_dest) == 0)
{
printf("文件剪切失败 \n");
}
else
{
printf("文件剪切成功 \n");
}
system("pause");
return 0;
}
11.3 DelteFile
DeleteFile 函数用于删除指定的文件,该函数位于windows.h
头文件中,此函数只能用于删除文件而无法删除目录,如果需要删除目录则需要使用RemoveDirectory
来实现,该函数原型如下:
BOOL DeleteFile(
LPCTSTR lpFileName
);
其中,lpFileName
参数是一个指向以 NULL
结尾的字符串,表示要删除的文件名,可以是绝对路径或相对路径,函数执行成功时返回 TRUE
,否则返回 FALSE
,如果删除失败则可以调用GetLastError()
得到失败代码。
#include <iostream>
#include <Windows.h>
int main(int argc, const char* argv[])
{
// 如果非零则删除失败
if (!DeleteFile("d://lyshark.exe"))
{
printf("删除文件错误:%x \n", GetLastError());
}
system("pause");
return 0;
}
标签:文件,删除,dest,11.1,char,BOOL,file,拷贝,目录
From: https://www.cnblogs.com/LyShark/p/17841611.html