zoukankan      html  css  js  c++  java
  • 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 = { 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("%s
      ", Buffer);
      ​
      // 4. 设置获取偏移
      SetFilePointer(FileHandle, 0, 0, FILE_BEGIN);
      ​
      // 4. 写入文件
      // 参数一: 文件的句柄
      // 参数二: 想要写入的数据
      // 参数三: 需要写入多少数据(字节)
      // 参数四: 写入成功了多少数据
      // 参数五: 重叠 IO 结构,暂时用不到
      DWORD RealWrite = 0;
      WriteFile(FileHandle, "abcdef", 6, &RealWrite, NULL);
      ​
      // 7. 设置文件的结束位置为当前文件指针的位置
      SetFilePointer(FileHandle, 2, 0, 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("[目录]: %ls
      ", 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 秒
      ",
                          SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay,
                          SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond);
                  }
      ​
              } while (FindNextFile(FindHande, &FileInfo));
          }
      }
      ​
    •  

  • 相关阅读:
    网站设计分析:模块化——高效重构
    linux 优化git操作速度
    cool
    跨域解决方案
    vue 登录验证引擎
    scss学习笔记
    配置动态加载模块和js分模块打包,生产环境和开发环境公共常量配置
    降低版本安装flashPlayer
    python 学习日志
    centos atomic host第一次启动
  • 原文地址:https://www.cnblogs.com/ltyandy/p/10932765.html
Copyright © 2011-2022 走看看