文件操作
-
不带句柄的文件操作
// 1. 拷贝文件,第三个参数为 FALSE 表示会覆盖
// CopyFile(L"D:1.txt",L"E:2.txt",FALSE);
?
// 2. 移动文件,相当于改名
// MoveFile(L"D:1.txt",L"D:2.txt");
?
// 3. 获取文件属性
WIN32_FILE_ATTRIBUTE_DATA FileInfo = { 0 };
GetFileAttributesEx(L"D:2.txt",GetFileExInfoStandard,&FileInfo);
?
// 3.1 判断文件的属性是否是只读
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
printf("该文件只读");
else
printf("该文件可修改");
?
// 4. 删除文件[不要随便用]
DeleteFile(L"D:2.txt");
?
// 5. 删除一个目录使用下列函数 RemoveDirectory()
?
-
带句柄的文件操作
// 1. 创建打开文件,返回文件句柄,失败返回 -1
HANDLE FileHandle = CreateFile(
L"E:2.txt",// 文件的路径
GENERIC_ALL,// 表示可以对文件执行任何操作
NULL,// 共享方式,我正在操作的时候,允许其他进程执行的操作
NULL,// 安全属性
OPEN_EXISTING,// 始终创建这个文件
FILE_ATTRIBUTE_NORMAL,// 普通的文件
NULL);
?
// 2. 判断是否创建成功
if (FileHandle == INVALID_HANDLE_VALUE)
{
MessageBox(NULL,L"文件创建失败",L"警告",MB_OK);
ExitProcess(-1);
}
?
?
// 3. 通过句柄读取文件
// 参数一: 文件的句柄
// 参数二: 读取到的数据存放到哪里
// 参数三: 需要读取多少数据(字节)
// 参数四: 读取成功了多少数据
// 参数五: 重叠 IO 结构,暂时用不到
DWORD RealRead = 0;
CHAR Buffer[0x100] = { 0 };
BOOL ReadSucess = ReadFile(FileHandle,Buffer,100,&RealRead,NULL);
if (ReadSucess == TRUE) printf("%sn",Buffer);
?
// 4. 设置获取偏移
SetFilePointer(FileHandle,0,0,FILE_BEGIN);
?
// 4. 写入文件
// 参数一: 文件的句柄
// 参数二: 想要写入的数据
// 参数三: 需要写入多少数据(字节)
// 参数四: 写入成功了多少数据
// 参数五: 重叠 IO 结构,暂时用不到
DWORD RealWrite = 0;
WriteFile(FileHandle,"abcdef",6,&RealWrite,NULL);
?
// 7. 设置文件的结束位置为当前文件指针的位置
SetFilePointer(FileHandle,2,FILE_BEGIN);
SetEndOfFile(FileHandle);
?
// 5. 获取大小
int LowSize = GetFileSize(FileHandle,NULL);
?
-
文件的遍历
// 递归遍历文件:
VOID File(LPCWSTR FilePath)
{
// 1. 拼接想要遍历的路径
wstring FindPath = wstring(FilePath)+ L"*";
?
// 提供结构体用于保存遍历到的信息
WIN32_FIND_DATA FileInfo = { 0 };
?
// 尝试遍历第一个文件文件夹
HANDLE FindHande = FindFirstFile(FindPath.c_str(),&FileInfo);
?
// 如果遍历成功,则输出信息并继续遍历
if (FindHande != INVALID_HANDLE_VALUE)
{
do {
// 判断是否是一个目录
if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// 判断文件夹是否是 . 和 ..,排除掉进行递归
if (wcscmp(L".",FileInfo.cFileName) &&
wcscmp(L"..",FileInfo.cFileName))
{
// 使用函数进行递归遍历
printf("[目录]: %lsn",FileInfo.cFileName);
?
// 拼接新的路径,下一层需要查找的路径
wstring newpath = wstring(FilePath) + L"" + FileInfo.cFileName;
// 递归调用函数
File(newpath.c_str());
}
}
else
{
// 输出文件名
printf("[文件]: %ls ",FileInfo.cFileName);
?
// 输出文件的创建时间
FILETIME LocalFileTime = { 0 };
FileTimeToLocalFileTime(&FileInfo.ftCreationTime,&LocalFileTime);
?
// 转换时间戳为系统时间
SYSTEMTIME SystemTime = { 0 };
FileTimeToSystemTime(&LocalFileTime,&SystemTime);
?
// 输出时间日期
printf("%d 年 %d 月 %d 日 %d 时 %d 分 %d 秒n",SystemTime.wYear,SystemTime.wMonth,SystemTime.wDay,SystemTime.wHour,SystemTime.wMinute,SystemTime.wSecond);
}
?
} while (FindNextFile(FindHande,&FileInfo));
}
}
?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|