zoukankan      html  css  js  c++  java
  • 24.windows文件系统

    windows文件

    1.创建或打开文件

      HANDLE  CreateFile( LPCTSTR                           lpFileName,                   //文件名称

                                       DWORD                            dwDesiredAccess,          //访问权限

                                       DWORD                            dwShareMode,              //共享方式

                                       LPSECURITY_ATTRIBUTES  lpSecurityAttributes,      //安全属性,默认为NULL

                                       DWORD                            dwCreationDisposition,   //创建或打开方式

                                       DWORD                            dwFlagsAndAttributes,   //文件属性

                                       HANDLE                            hTemplateFile);              //文件句柄模板,默认为NULL

      成功返回文件句柄

    2.写数据

      BOOL  WriteFile( HANDLE             hFile,                               //文件句柄

                                  LPCVOID            lpBuffer,                          //数据buff

                                  DWORD             nNumberOfBytesToWrite,  //写入的字节数

                                  LPDWORD          nNumberOfBytesWritten,  //实际写入的字节数

                LPOVERLAPPED   lpOverlapped );                //默认为NULL

    3.读数据

      BOOL  ReadFile( HANDLE             hFile,                               //文件句柄

                                 LPVOID              lpBuffer,                          //数据buff

                                 DWORD             nNumberOfBytesToRead,  //要读的字节数

                                 LPDWORD          lpNumberOfBytesRead,     //实际读到的字节数

                                 LPOVERLAPPED   lpOverlapped);                 //默认为NULL

    4.关闭文件

      BOOL  CloseHandle( HANDLE hObject );  //文件句柄

    5.文件长度

      DWORD  GetFileSize( HANDLE     hFile,                 //文件句柄

                                         LPDWORD  lpFileSizeHigh);  //返回文件长度的高32位

      返回值是文件长度的低32位

    6.文件指针

      DWORD  SetFilePointer( HANDLE    hFile,                            //文件句柄

                                            LONG       lDistanceToMove,           //偏移量的低32位

                                            PLONG      lpDistanceToMoveHigh,  //返回实际偏移量的高32位

                      DWORD    dwMoveMethod);           //偏移的相对位置

      返回实际偏移量的低32位

    7.文件相关操作

      //拷贝文件

      BOOL  CopyFile( LPCTSTR   lpExistingFileName,  //源文件路径(被复制的文件)

                                 LPCTSTR   lpNewFileName,       //目的地路径

                                 BOOL        bFailIfExists);         //是否覆盖(TRUE-不覆盖,FALSE-覆盖)

      //删除文件

      BOOL  DeleteFile( LPCTSTR  lpFileName);

      //移动文件(可跨盘符,如果有相同文件则不行)

      BOOL  MoveFile( LPCTSTR   lpExistingFileName,  //源文件路径

                                 LPCTSTR   lpNewFileName);      //目的地路径

    8.文件属性

      GetFileAttributes - 获取文件属性

      SetFileAttributes - 设置文件属性

      GetFileAttributesEx - 获取文件属性、时间等

    9.遍历文件

      (1)查找文件

         HANDLE FindFirstFile( LPCTSTR                     lpFileName,       //查找的路径

                                                 LPWIN32_FIND_DATA   lpFindFileData);  //查找的数据

         返回查找句柄

      (2)获取下一个文件

         BOOL FindNextFile( HANDLE                      hFindFile,           //查找句柄

                                              LPWIN32_FIND_DATA   lpFindFileData);  //查找的数据

         找到返回TRUE

      (3)关闭查找

         BOOL  FindClose( HANDLE  hFindFile);  //查找句柄

      相关代码:

    #include "stdafx.h"
    #include "stdio.h"
    #include "windows.h"
    
    void Create()
    {
        //CREATE_NEW - 如果文件存在,不创建
        //CREATE_ALWAYS - 如果文件存在,删除它,创建
        HANDLE hFile = CreateFile("d:/file.txt", GENERIC_WRITE, FILE_SHARE_READ,
            NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        CloseHandle(hFile);
    }
    void Write()
    {
        HANDLE hFile = CreateFile("d:/file.txt", GENERIC_WRITE, FILE_SHARE_READ,
            NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        char szText[] = "hello txt";
        DWORD nCount = 0;
        WriteFile(hFile, szText, strlen(szText), &nCount, NULL);
        printf("准备写入的长度: %d,实际写入的长度: %d
    ", strlen(szText), nCount);
        CloseHandle(hFile);
    }
    void Read()
    {
        HANDLE hFile = CreateFile("d:/file.txt", GENERIC_READ, FILE_SHARE_READ,
            NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        DWORD nHigh = 0;
        DWORD nLow = GetFileSize(hFile, &nHigh);  //得到文件的大小
        char szText[256] = { 0 };
        DWORD nCount = 0;
        ReadFile(hFile, szText, nLow, &nCount, NULL);
        printf("准备读取的长度:%d,实际读到的长度:%d,数据:%s
    ", nLow, nCount, szText);
        CloseHandle(hFile);
    }
    void UseFile()
    {
        CopyFile("d:/file.txt", "d:/123/file.txt", TRUE);
        DeleteFile("d:/file.txt");
        MoveFile("d:/123/file.txt", "d:/file.txt");
    }
    void Find()
    {
        char szPath[] = "c:/*.*";
        WIN32_FIND_DATA wfd = { 0 };
        HANDLE hFind = FindFirstFile(szPath, &wfd);
        BOOL goFind = TRUE;
        while (goFind)
        {
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)  //是目录
            {
                printf("[%s]
    ", wfd.cFileName);
            }
            else
            {
                printf("%s
    ", wfd.cFileName);
            }
            goFind = FindNextFile(hFind, &wfd);
        }
        FindClose(hFind);
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
        Create();
        Write();
        Read();
        UseFile();
        Find();
        return 0;
    }
    View Code
  • 相关阅读:
    现在连Linux都搞不懂,当初我要是这么学习操作系统就好了!
    一时技痒,撸了个动态线程池,源码放Github了
    Java线程池ThreadPoolExecutor使用和分析(一)
    canch----1.对缓存的思考
    1.java 内存数据库--H2数据库使用指南
    What’s the difference between persist, save, merge and update? Which one should you use?
    primary key's generator in JPA entity
    STM32F103驱动M24256 256k存储芯片进行读写
    【Proteus+51单片机学习笔记】-51/52系列单片机简介
    【STM32项目笔记】STM32CubeMX+Keil+Proteus联合实现LED闪烁
  • 原文地址:https://www.cnblogs.com/csqtech/p/5662698.html
Copyright © 2011-2022 走看看