VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 899|回复: 1

[原创] 《C/C++ Windows 程序设计》 输出贴

[复制链接]
74_avatar_middle
最佳答案
0 
在线会员 发表于 2021-11-19 09:28:36 | 显示全部楼层 |阅读模式
学习《C/C++ Windows 程序设计》的第四天


                编译环境:Windows 10   VS2019

                学习目的:文件的基本操作,读写、创建、删除、遍历

                涉及API函数:ReadFile()、WriteFile()、SetFilePointer()、CreateDirectory()、RemoveDirectory()、FindFirstFile()、FindNextFile()

                1、WriteFile():从文件指针指向的位置开始将数据写入到一个文件中, 且支持同步和异步操作

                        注意点:        1、所读文件前需获取文件句柄,可以使用CreateFile()函数进行打开文件获取句柄;

                                        2、打开的文件需具备“GENERIC_WRITE”访问权限;

                                        3、第二参数为写数据的首地址,取首地址运用“&”获取,数组的首地址为数组名;

                2、ReadFile():从文件指针指向的位置开始将文件数据读入内存中, 且支持同步和异步操作。

                        注意点:读取数据需按循序进行读取;

                3、SetFilePointer():设置文件当前的读写位置,弥补了ReadFile()函数需按循序读取的不足,可以指定读写位置;

                        注意点:        1、所读打开的文件必须有“GENERIC_READ”或者“ GENERIC_WRITE ”的权限;

                                        2、第四个参数作用,表明读取循序,有FILE_BEGIN->从文件头开始往后移动;FILE_CURRENT->从文件的当前指针位置开始移动;FILE_END->从文件尾部开始往前移动;

                4、CreateDirectory():创建一个新的单一层级的目录

                        注意点:        1、创建单一层级,如创建多层层级将创建失败;

                                        2、创建多层文件,可以使用嵌套创建,多次使用该函数或者使用MakeSureDirectoryPathExists()函数;

                5、RemoveDirectory():删除一个现有的不包含任何文件的空目录

                        注意点:        1、删除的文件为空目录,如目录不为空,则删除失败;

                                        2、删除不为空的目录,可以使用SHFileOperation()函数,特别注意使用该函数需要包含对应的头文件#include <Shlwapi.h>|#pragma comment (lib,"Shlwapi.lib"),并且该函数不仅仅可以做删除操作,还可做想对应的复制、移动、重命名;

                6、文件的遍历,使用到FindFristFile()[查找首个文件]与FindNextFile()[查找下一个文件],

                        代码示例,-> 采用控制台程序

                #include <iostream>
                #include <tchar.h>
                #include <Windows.h>
                using namespace std;

                #pragma warning (disable:4996)

                BOOL EnumFiles(LPCTSTR lpszPath,LPCTSTR lpType) //lpszPath:遍历的路径|lpType:遍历的类型
                {
                        //构造一个目录下的那种类型的文件
                        TCHAR szPath[MAX_PATH] = { 0 };
                        //格式化输出
                        _stprintf(szPath, "%s\\%s", lpszPath,lpType);

                        WIN32_FIND_DATA 文件属性 = { 0 };
                        //查找第一个文件
                        HANDLE hFile = FindFirstFile(szPath,&文件属性);
                        //如果查找失败,返回FALSE
                        if (hFile == INVALID_HANDLE_VALUE) return FALSE;
                        BOOL bRet = TRUE;
                        //使用do循环语句进行遍历
                        do
                        {
                                bRet = FindNextFile(hFile, &文件属性);
                                //判断是否成功,失败了就退出
                                if (!bRet) break;
                                cout << 文件属性.cFileName << endl;
                        } while (bRet);


                        return TRUE;
                }

                int main(int argc, char* argv[])
                {
                        LPCTSTR 遍历目录 = "C:\\Windows";
                        EnumFiles(遍历目录,"*.*");
                        return 0;
                }

               
                自己编写时出现的问题:

                1、没有构造遍历类型,遍历的结果是空,需要设置遍历文件的类型。

       
                                                                                                                                                2021年11月19日

               
                       




上一篇:《C/C++ Windows 程序设计》 输出贴
下一篇:《C/C++ Windows 程序设计》 输出贴
25_avatar_middle
最佳答案
0 
在线会员 发表于 2021-11-19 17:19:54 | 显示全部楼层
很不错学习了~~
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2023-9-28 13:00

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表