• 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
  • 相关阅读:
    C语言-结构体内存对齐
    Wireshark-配合tcpdump对Android(安卓)手机抓包
    Python-技巧
    矩阵白化
    非负矩阵分解(3):拉格朗日乘子法求解
    非负矩阵分解(2):算法推导与实现
    非负矩阵分解(1):准则函数及KL散度
    自适应滤波:递归最小二乘
    自适应滤波:最小二乘法
    自适应滤波:奇异值分解SVD
  • 原文地址:https://www.cnblogs.com/csqtech/p/5662698.html
Copyright © 2020-2023  润新知