今天把前面几天的博客转到日记去了,然后不给转回来...............................
搜了一下博客园问答,确实要让我重新发博客..............日了狗了.................
今天看了一节视频而已,主要是身体很乏...https://www.bilibili.com/video/av79302998?p=65
学会了二进制读写

struct Student { public: int age; char sex; char name[32]; }; //路径操作 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPreInstance, LPTSTR lpCmdLine, int nShowCmd) { LPCWSTR pl = _T("D:\桌面\我爱学习VC程站的课程"); //创建单一层级目录 CreateDirectory(pl, NULL); //移除目录 RemoveDirectory(pl); //只能删除空目录 EnumFiles(_T("D:\桌面"), _T("*.*")); return 0; } //二进制数据的操作 int WINAPI _tWinMain文件读写(HINSTANCE hInstance, HINSTANCE hPreInstance, LPTSTR lpCmdLine, int nShowCmd) { LPCTSTR path = _T("D:\桌面\a.txt"); HANDLE hFile = CreateFile(path, GENERIC_READ | GENERIC_WRITE, //读写模式 FILE_SHARE_READ, //其他人以读的权限打开 NULL, //安全描述符 OPEN_ALWAYS, //打开失败也创建一个 FILE_ATTRIBUTE_NORMAL, //文件属性 NULL); //模板文件的句柄 if (hFile == INVALID_HANDLE_VALUE)//打开文件的错误码 { DWORD dwError = GetLastError(); //放在错误语句的后面.. MessageBox(NULL, _T("创建或打开失败!"), _T("提示"), MB_OK | MB_ICONERROR | MB_DEFBUTTON1); return 0; } int num = 123; DWORD red = 0; // PDWORD red = 0; BOOL bRet; bRet = WriteFile( hFile, //文件的句柄 &num, //起始的地址 sizeof(num), //单位字节数 &red, //实际上写了多少数量,接收返回 NULL //异步写操作 ); CHAR ch = 'q'; bRet = WriteFile(hFile, &ch, sizeof(ch), &red, NULL); CHAR strs[32] = "啊啊我"; bRet = WriteFile(hFile, &strs, sizeof(strs), &red, NULL); Student su; su.age = 124; su.sex = 'f'; strcpy_s(su.name, "zhangsan"); bRet = WriteFile(hFile, &su, sizeof(su), &red, NULL); if (bRet) { // MessageBox(NULL, _T("写入成功!"), _T("提示"), MB_OK | MB_ICONERROR | MB_DEFBUTTON1); } else { MessageBox(NULL, _T("写入失败!"), _T("提示"), MB_OK | MB_ICONERROR | MB_DEFBUTTON1); } //结束写入 CloseHandle(hFile);//有效句柄就关闭文件 //重新读取(防止文件指针在最后面) hFile = CreateFile(path, GENERIC_READ | GENERIC_WRITE, //读写模式 FILE_SHARE_READ, //其他人以读的权限打开 NULL, //安全描述符 OPEN_ALWAYS, //打开失败也创建一个 FILE_ATTRIBUTE_NORMAL, //文件属性 NULL); //模板文件的句柄 if (hFile == INVALID_HANDLE_VALUE)//打开文件的错误码 { DWORD dwError = GetLastError(); //放在错误语句的后面.. MessageBox(NULL, _T("创建或打开失败!"), _T("提示"), MB_OK | MB_ICONERROR | MB_DEFBUTTON1); return 0; } #if false //每个数据类型都读入 //读二进制文件 int ret_num = 0;//读取返回内容 DWORD dwRealRead = 0; bRet = ReadFile( hFile, //文件的句柄 &ret_num, //起始的地址,返回读取内容 sizeof(ret_num), //读取大小 &dwRealRead, //实际上读了多少数量,接收返回 NULL //异步写操作 ); char cha = 0;//读取返回内容 bRet = ReadFile(hFile, &cha, sizeof(cha), &dwRealRead, NULL); char szTextRet[32] = { 0 }; //首地址所以不用& bRet = ReadFile(hFile, szTextRet, sizeof(szTextRet), &dwRealRead, NULL); Student stud2 = { 0 }; bRet = ReadFile(hFile, &stud2, sizeof(Student), &dwRealRead, NULL); if (bRet) { // MessageBox(NULL, _T("数据读取成功!"), _T("Tip"), MB_OK); } else { MessageBox(NULL, _T("数据读取失败!"), _T("Tip"), MB_OK); } #else //利用文件指针跳跃前面几个数据类型 //SetFilePointer(hFile, // sizeof(int)+ sizeof(char), //要越过的距离 // NULL, //不高过32位就不用 // FILE_BEGIN //从头往后移动 // ); LONG ui = -32 - (LONG)sizeof(Student); SetFilePointer(hFile, ui, //要越过的距离 NULL, //不高过32位就不用 FILE_END //后面往前移动 ); //读二进制文件 DWORD dwRealRead = 0; CHAR szTextRet[32] = { 0 }; //首地址所以不用& bRet = ReadFile(hFile, szTextRet, sizeof(szTextRet), &dwRealRead, NULL); Student stud2 = { 0 }; bRet = ReadFile(hFile, &stud2, sizeof(Student), &dwRealRead, NULL); if (bRet) { // MessageBox(NULL, _T("数据读取成功!"), _T("Tip"), MB_OK); } else { MessageBox(NULL, _T("数据读取失败!"), _T("Tip"), MB_OK); } #endif // false //每个数据类型都读入 CloseHandle(hFile);//有效句柄就关闭文件 return 0; }
然后学习了遍历目录和文件,
难点是要处理控制台输出中文的问题...

/// <summary> /// 枚举所有文件 /// </summary> /// <param name="lpazPath">路径</param> /// <param name="lpzType">类型</param> /// <returns>BOOL.</returns> BOOL EnumFiles(LPCTSTR lpazPath, LPCTSTR lpzType) { TCHAR szPath[MAX_PATH] = { 0 };//最大的路径长度 _stprintf_s(szPath, _T("%s\%s"), lpazPath, lpzType);//合并字符串 WIN32_FIND_DATA FindData = { 0 };//用于装载找到的类型,来给后续遍历 HANDLE hFind = FindFirstFile(szPath, &FindData); if (hFind == INVALID_HANDLE_VALUE) return FALSE; // https://zhidao.baidu.com/question/105950396.html wcout.imbue(locale("chs"));//设置控制台输出中文 //继续遍历 BOOL bRet; do { bRet = FindNextFile(hFind, &FindData); if (!bRet) { break; } wcout << FindData.cFileName << endl; } while (bRet); return TRUE; } int main() { EnumFiles(_T("C:\Windows"), _T("*.*")); EnumFiles(_T("D:\桌面\新建文件夹"), _T("*.*"));//处理中文 cin.get(); }
在窗体工程上面转到控制台的方法..然后记得用 main() 而不是 _tWinMain() 作为函数的起始函数....貌似还可以改入口点函数...
然后为了实现和c#一样的函数注释,在vs2019上面安装了一下GhostDoc.....
结束这天...