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\n", 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\n", 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]\n", wfd.cFileName);
        }
        else
        {
            printf("%s\n", wfd.cFileName);
        }
        goFind = FindNextFile(hFind, &wfd);
    }
    FindClose(hFind);
}
int _tmain(int argc, _TCHAR* argv[])
{
    Create();
    Write();
    Read();
    UseFile();
    Find();
    return 0;
}
View Code

 

posted @ 2016-07-12 10:39  甩锅侠  阅读(186)  评论(0编辑  收藏  举报