Windows提高_1.3文件操作
文件操作
不带句柄的文件操作
// 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 = { };
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(-);
}
// 3. 通过句柄读取文件
// 参数一: 文件的句柄
// 参数二: 读取到的数据存放到哪里
// 参数三: 需要读取多少数据(字节)
// 参数四: 读取成功了多少数据
// 参数五: 重叠 IO 结构,暂时用不到
DWORD RealRead = ;
CHAR Buffer[0x100] = { };
BOOL ReadSucess = ReadFile(FileHandle,
Buffer, , &RealRead, NULL);
if (ReadSucess == TRUE) printf("%s\n", Buffer);
// 4. 设置\获取偏移
SetFilePointer(FileHandle, , , FILE_BEGIN);
// 4. 写入文件
// 参数一: 文件的句柄
// 参数二: 想要写入的数据
// 参数三: 需要写入多少数据(字节)
// 参数四: 写入成功了多少数据
// 参数五: 重叠 IO 结构,暂时用不到
DWORD RealWrite = ;
WriteFile(FileHandle, "abcdef", , &RealWrite, NULL);
// 7. 设置文件的结束位置为当前文件指针的位置
SetFilePointer(FileHandle, , , FILE_BEGIN);
SetEndOfFile(FileHandle);
// 5. 获取大小
int LowSize = GetFileSize(FileHandle, NULL);文件的遍历
// 递归遍历文件:
VOID File(LPCWSTR FilePath)
{
// 1. 拼接想要遍历的路径
wstring FindPath = wstring(FilePath)+ L"\\*";
// 提供结构体用于保存遍历到的信息
WIN32_FIND_DATA FileInfo = { };
// 尝试遍历第一个文件\文件夹
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("[目录]: %ls\n", FileInfo.cFileName);
// 拼接新的路径,下一层需要查找的路径
wstring newpath = wstring(FilePath) + L"\\" + FileInfo.cFileName; // 递归调用函数
File(newpath.c_str());
}
}
else
{
// 输出文件名
printf("[文件]: %ls ", FileInfo.cFileName);
// 输出文件的创建时间
FILETIME LocalFileTime = { };
FileTimeToLocalFileTime(&FileInfo.ftCreationTime, &LocalFileTime);
// 转换时间戳为系统时间
SYSTEMTIME SystemTime = { };
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));
}
}
Windows提高_1.3文件操作的更多相关文章
- Windows与Linux下文件操作监控的实现
一.需求分析: 随着渲染业务的不断进行,数据传输渐渐成为影响业务时间最大的因素.究其原因就是因为数据传输耗费较长的时间.于是,依托于渲染业务的网盘开发逐渐成为迫切需要解决的需求.该网盘的实现和当前市场 ...
- Windows、Linux下文件操作(写、删除)错误的产生原因、及解决方法
catalog . 引言 . Linux平台上涉及的File IO操作 . Windows平台上涉及的File IO操作 0. 引言 本文试图讨论在windows.linux操作系统上基于C库进行文件 ...
- Windows Store 开发总结——文件操作
1.读取Isolated Storage 每个Metro程序都有三个文件夹:Local,Roaming,Temp.每个文件夹的访问方法都是相同的. Local用于将数据存储在本地,这是程序特定的文件夹 ...
- Windows提高_1.2遍历进程、遍历模块
进程 什么是进程? 通俗的来讲,进程就是一个运行中的程序,最少包含一个虚拟空间,通常是 4 GB大小,一组提供数据和代码的模块,通产是 dll 和 exe 文件,一个进程内核对象和最少一个线程. 进程 ...
- Windows system 在python文件操作时的路径表示方法
file_path =(r'i:\vacpy\ch10\pi_digits.txt') #将文件路径存储在变量file_path中with open (file_path) as file_objec ...
- Windows提高_1.1内核对象
内核对象 什么是内核对象? 内核对象本质上是一个结构体,我们不能直接的操作一个内核对象,需要通过操作系统提供的一系列函数和我们使用的内核对象句柄对它进行一系列的修改. 如何操作内核对象? 创建一个内核 ...
- Windows提高_1.4进程通信
进程通信 使用 WM_COPYDATA 客户端(发送端) // 1. 找到窗口程序 HWND hWnd = FindWindow(NULL, L"Window1"); // 2 ...
- Windows文件操作的API函数[转载]
在VC中,大多数情况对文件的操作都使用系统提供的 API 函数,但有的函数我们不是很熟悉,以下提供一些文件操作 API 函数介绍: 一般文件操作 API CreateFile 打开文件 要对文件进行读 ...
- 提高生产力:文件和IO操作(ApacheCommonsIO-汉化分享)
复制.移动.删除.比较.监控.文件读写 等文件和IO操作是编程中比较常用的功能. 幸运的是,Apache Commons IO等开源组件已经帮我们实现了. 我们可以不用重复 ...
随机推荐
- Chromium硬件加速渲染的UI合成过程分析
在Chromium中.Render端和WebGL端绘制出来的UI终于是通过Browser端显示在屏幕上的.换句话说.就是Browser端负责合成Render端和WebGL端的UI.这涉及到不同Open ...
- 修改mysql root密码
mysql密码丢失后,在mysql命令行下执行如下命令,即可将root用户密码清空: mysqld_safe --skip-grant-tables& mysql修改密码 mysql修改,可在 ...
- iOS动画案例(1) 仿qq账号信息里的一个动画
受人所托,模仿qq账号信息里的一个动画,感觉挺有意思,也没感觉有多难,就开始做了,结果才发现学的数学知识都还给体育老师了,研究了大半天才做出来. 先看一下动画效果: 用到的知识点: ( ...
- Unity3D游戏开发最佳实践20技巧(一)
关于这些技巧这些技巧不可能适用于每一个项目. 这些是基于我的一些项目经验.项目团队的规模从3人到20人不等. 框架结构的可重用性.清晰程度是有代价的--团队的规模和项目的规模决定你要在这个上面付出多少 ...
- Oracle学习(四):组函数
1.知识点:能够对比以下的录屏进行阅读 SQL> --组函数类型:avg,count,max.min,sum SQL> --工资总额 SQL> select sum(sal) fro ...
- HDU 5752Sqrt Bo
Sqrt Bo Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total S ...
- YTU 2505: 啤酒和饮料
2505: 啤酒和饮料 时间限制: 1 Sec 内存限制: 128 MB 提交: 850 解决: 318 题目描述 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了s元. 我们 ...
- Codeforces Round #267 (Div. 2) C. George and Job(DP)补题
Codeforces Round #267 (Div. 2) C. George and Job题目链接请点击~ The new ITone 6 has been released recently ...
- BaezaYates 交集python和golang代码
def bsearch(find, arr, low, high): while low <= high: mid = (low + high) >> 1 if arr[mid] = ...
- 2018.09.09 DL24 Day2总结
今天挂的有点惨…… T1.forging 这道题自己在考试的时候想出来了…… 这题是一个期望递推.我们首先考虑这么一件事,一枚硬币,你抛到正面停止,抛到反面继续抛,问期望抛的次数.是两次.我们假设期望 ...