大学思政类网站建设,外贸网站建设升上去,做淘宝客怎样建网站,网页界面设计课程文章目录 前言一、文件指针是什么#xff1f;二、设置文件指针的位置#xff1a;随机读写#xff0c;SetFilePointer函数1.函数说明2.函数实例 三、 目录的创建CreateDirectory四、目录的删除RemoveDirectory总结 前言
Windows程序设计10#xff1a;文件指针及目录的创建与… 文章目录 前言一、文件指针是什么二、设置文件指针的位置随机读写SetFilePointer函数1.函数说明2.函数实例 三、 目录的创建CreateDirectory四、目录的删除RemoveDirectory总结 前言
Windows程序设计10文件指针及目录的创建与删除。 一、文件指针是什么
文件指针主要用于文件的读和写。打开一个文件后默认就与之产生了一个内部的记录文件位置的指针用于指示当前的读写位置。当进行了文件的读写操作后指针会自动往后移动。读写了多少字节就会往后移动多少字节。默认情况下可能我们也不需要关心文件的指针因为文件的指针位置都是默认自动控制的。当你想要从一个文件的指定位置进行读写的时候就需要用到文件指针。如大文件的断点续传形式下载。
二、设置文件指针的位置随机读写SetFilePointer函数
1.函数说明
函数原型如下
DWORD SetFilePointer(HANDLE hFile, // 文件句柄LONG lDistanceToMove, // 要移动的距离低 32 位PLONG lpDistanceToMoveHigh, // 要移动的距离高 32 位DWORD dwMoveMethod // 移动的起始位置
);参数 HANDLE hFile为文件句柄必须是通过 CreateFile 打开的句柄。句柄必须具有 GENERIC_READ 或 GENERIC_WRITE 访问权限。
参数LONG lDistanceToMove为要移动的距离低 32 位。如果 lpDistanceToMoveHigh 为 NULL则这是一个有符号的 32 位值。
PLONG lpDistanceToMoveHigh指向一个 LONG 变量的指针用于指定要移动的距离高 32 位。如果为 NULL则文件指针移动范围限制在 32 位。
DWORD dwMoveMethod指定文件指针移动的起始位置。可以是以下值之一FILE_BEGIN从文件开头开始移动。FILE_CURRENT从当前位置开始移动。FILE_END从文件末尾开始移动。
返回值如果函数执行成功返回文件指针的新位置低 32 位。如果函数执行失败返回 INVALID_SET_FILE_POINTER。可以通过 GetLastError 获取错误代码。注意高32位的值通过参数PLONG lpDistanceToMoveHigh传出。
2.函数实例
与之前一样写入如下数据 // 写入数据// 写入一个数字int num 12345; // 写入的数据DWORD rw 0; // 传出的实际写入大小bret WriteFile(handle1, num, sizeof(num), rw, NULL);// 写入一个字母char ch A;bret WriteFile(handle1, ch, sizeof(ch), rw, NULL);// 写入包含中文的字符串char st[32] abc要好好学习!;bret WriteFile(handle1, st, sizeof(st), rw, NULL);if (bret){MessageBox(NULL, _T(数据写入成功), _T(提示), MB_OK);}else{MessageBox(NULL, _T(数据写入失败), _T(提示), MB_OK);}CloseHandle(handle1);}则文件中数据为 想要实现直接读取字符串“abc要好好学习”即略过前面的数字123345和字符A进行读取。 handle1 CreateFile(_T(D:\\新年快乐.txt), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);if (handle1 ! INVALID_HANDLE_VALUE) // 函数执行成功{// 读取数字DWORD readw 0;// 移动文件指针位置SetFilePointer(handle1, sizeof(int) sizeof(char), NULL, FILE_BEGIN);// 读取字符串char read_str[32] { 0 };bret ReadFile(handle1, read_str, sizeof(read_str), readw, NULL);if (bret){MessageBox(NULL, _T(数据读入成功), _T(提示), MB_OK);}else{MessageBox(NULL, _T(数据读入失败), _T(提示), MB_OK);}CloseHandle(handle1);}else{DWORD dwerror GetLastError();MessageBox(NULL, _T(文件没有成功打开), _T(提示), MB_OK);}可以看到读取成功 上述代码是从文件开头向后移动移动了一个int和一个char这么多的距离下面演示一下从文件末尾向前移动移动那么就需要移动字符串这么多的距离。这里设置字符串长度为32字节因此只需要更改SetFilePointer这行代码
SetFilePointer(handle1, -32, NULL, FILE_END);同样能够正确读取字符串
三、 目录的创建CreateDirectory
用于创建单一层级的目录。建立多层级目录需要使用函数MakeSureDirectoryPathExists。这里只介绍CreateDirectory函数原型如下
BOOL CreateDirectory(LPCTSTR lpPathName, // 目录路径LPSECURITY_ATTRIBUTES lpSecurityAttributes // 安全属性
);参数LPCTSTR lpPathName为要创建的目录的路径。可以是绝对路径或相对路径。 参数LPSECURITY_ATTRIBUTES lpSecurityAttributes指向 SECURITY_ATTRIBUTES 结构的指针用于设置目录的安全属性。如果为 NULL则使用默认安全属性。
返回值如果成功返回 TRUE。如果失败返回 FALSE。可以通过 GetLastError 获取错误码。
以在D盘下创建一个学习C的文件夹为例
CreateDirectory(_T(D://学习C), NULL);文件夹创建成功 但是连续创建子文件夹就会出现问题删掉刚刚创建的“学习C”文件夹后运行如下代码 BOOL bret CreateDirectory(_T(D:\\学习C\\123), NULL);if (!bret){int err GetLastError();}可以看到err错误码为3 错误码3对应的问题为 这就是上述建立多层级目录不可以使用CreateDirectory。
四、目录的删除RemoveDirectory
删除一个现有的不包含任何文件的空目录要删除非空目录需要调用SHFileOperation。这里只介绍RemoveDirectory函数声明为
BOOL RemoveDirectory(LPCTSTR lpPathName // 目录路径
);参数LPCTSTR lpPathName为要删除的目录的路径。可以是绝对路径或相对路径。路径的最大长度为 MAX_PATH260 个字符。
返回值如果函数执行成功返回 TRUE。如果失败返回 FALSE。可以通过 GetLastError 获取错误码。
删除D盘下的“学习C”文件夹文件夹内部还有一个子文件夹123。 代码如下 // 删除文件目录BOOL bret_re RemoveDirectory(_T(D:\\学习C));if (!bret_re){int err GetLastError();}函数执行失败错误码为145 对应的问题为 这就是由于存在子文件夹导致的如果不包含子目录 则此时上述代码运行成功D盘内的文件夹“学习C”成功删除。 总结
Windows程序设计10文件指针及目录的创建与删除。