• API---文件操作


    CreateFile() 介绍:

    功能:打开或创建以下对象,并返回可访问的句柄:

              控制台,通信资源,目录(只读打开),磁盘驱动器,文件,邮槽,管道。

    函数原型:HANDLE CreateFile (

                      LPCTSTR lpFileName,    // 指向文件或其它设备名的指针。详情可见 CreateFile() 详解
                      DWORD dwDesiredAccess,    // 访问模式(写 / 读)

                      DWORD dwShareMode,    // 共享模式 
                      LPSECURITY_ATTRIBUTES lpSecurityAttributes, // 指向安全属性的指针,一般为 NULL。 
                      DWORD dwCreationDisposition,   // 如何创建 
                      DWORD dwFlagsAndAttributes,   // 文件属性 
                      HANDLE hTemplateFile    // 用于复制文件句柄 
                      );

    参数:( 组合) 

              lpFileName:若为命名管道服务器,则该值形式为:“\.pipepipename”,

                                    若为命名管道客户端,则该值形式为:"\servernamepipepipename"。

                                    若为邮件槽服务器,则该值形式为:"\.mailslotmailslotname",

                                    若为邮件槽客户端,则该值形式为:"\servernamemailslotname"。

              dwDesiredAccess:GENERIC_READ , GENERIC_WRITE, 0 (只允许获取与设备有关的信息) 。

              dwShareMode:FILE_SHARE_DELETE, FILE_SHARE_READ, FILE_SHARE_WRITE, 0 (不共享)。

              lpSecurityAttributes:指向一个 SECURITY_ATTRIBUTES 结构的指针。

              dwCreationDisposition:

                                                  CREATE_NEW 创建文件;如文件存在则会出错。
                                                  CREATE_ALWAYS 创建文件,会改写前一个文件。
                                                  OPEN_EXISTING 文件必须已经存在。由设备提出要求。
                                                  OPEN_ALWAYS 如文件不存在则创建它。
                                                  TRUNCATE_EXISTING 将现有文件缩短为零长度。
              dwFlagsAndAttributes:
                                                   FILE_ATTRIBUTE_ARCHIVE 标记归档属性
                                                   FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩或者标记为文件在目录中的默认压缩方式
                                                   FILE_ATTRIBUTE_NORMAL 默认属性
                                                   FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录
                                                   FILE_ATTRIBUTE_READONLY 文件为只读
                                                   FILE_ATTRIBUTE_SYSTEM 文件为系统文件
                                                   FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作
                                                   FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作
                                                   FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块
                                                   FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化
                                                   FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化
                                                   FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。
              hTemplateFile:如果不为零,则指定一个文件句柄,新文件将从这个文件中复制和扩展属性。
     
    返回值:如执行成功,则返回文件句柄。否则返回 INVALID_HANDLE_VALUE。
     
    struct _SECURITY_ATTRIBUTES 结构体:
    // 主要作用是决定 CreateFile() 返回的句柄是否可以被子进程继承。
    // 该值通常设置为 NULL 表示不能被继承。
    typedef struct _SECURITY_ATTRIBUTES { DWORD nLength; / /结构体的大小,可用SIZEOF取得 LPVOID lpSecurityDescriptor; / /安全描述符(一般为 NULL) BOOL bInheritHandle ;/ /安全描述的对象能否被新创建的进程继承 } SECURITY_ATTRIBUTES,* PSECURITY_ATTRIBUTES;

    CloseHandle() 介绍:

    功能:关闭一个内核对象。其中包括文件、文件映射、进程、线程、安全和同步对象等。
    函数原型:BOOL CloseHandle( HANDLE hObject ) ;
    参数:hObject Long,欲关闭的一个对象的句柄。
    返回值:非零表示成功,零表示失败。
     
    ReadFile() 介绍:
    功能:从文件指针指向的位置开始将数据读出到一个文件中, 且支持同步和异步操作。

    函数原型:BOOL ReadFile(

                 HANDLE hFile, //文件的句柄。
                 LPVOID lpBuffer, //用于保存读入数据的一个缓冲区。
                 DWORD nNumberOfBytesToRead, //指定需要要读入的字符数。
                 LPDWORD lpNumberOfBytesRead, //返回实际读取字节数的指针。
                 LPOVERLAPPED lpOverlapped //如文件打开时指定了FILE_FLAG_OVERLAPPED,
           // 那么必须用这个参数引用一个特殊的结构。该结构定义了一次异步读取操作。否则,应将这个参数设为NULL。
      );
    返回值:非零表示成功,零表示失败。
     
    WriteFile() 介绍:
    功能:从文件指针指向的位置开始将数据写入到一个文件中, 且支持同步和异步操作。
    函数原型:BOOL WriteFile(
                      HANDLE       hFile,    // 文件句柄
                      LPCVOID      lpBuffer,  // 要写入的数据。
                      DWORD        nNumberOfBytesToWrite,  // 要写入的字节数。
                      LPDWORD      lpNumberOfBytesWritten, // 实际写入的字节数。
                      LPOVERLAPPED lpOverlapped       //  同 ReadFile(), 一般设置为 NULL。
    );
    返回值:非零表示成功,零表示失败。
     
    SetFilePointer() 介绍:
    功能:在一个文件中设置当前的读取位置。
    函数原型:DWORD SetFilePointer(
                      HANDLE hFile, // 文件句柄。
                      LONG lDistanceToMove, // 偏移量(低位)。
                      PLONG lpDistanceToMoveHigh, // 偏移量(高位)。( 通常为 NULL)
                      DWORD dwMoveMethod // 基准位置:
                                                                   FILE_BEGIN:文件开始位置。
                                                                   FILE_CURRENT:文件当前位置 。
                                                                   FILE_END:文件结束位置。
    返回值:返回一个新位置,HFILE_ERROR意味着出错。
     
    DeleteFile() 介绍:
    功能:删除指定文件或目录。
    函数原型:BOOL DeleteFile(
                      LPCSTR  lpFileName // 指向要删除的文件。
                      );
    返回值:非零表示成功,零表示失败。
     
     CreateDirectory() 介绍:
    功能:创建新的目录。
    函数原型:BOOL CreateDirectoryA(
                      LPCSTR                lpPathName,   //目录路径名。
                      LPSECURITY_ATTRIBUTES lpSecurityAttributes  // 安全属性,同 CreateFile() ;
                      );
    返回值:非零表示成功,零表示失败。
     
    RemoveDirectory() 介绍:
    功能:删除目录。
    函数原型:BOOL RemoveDirectory(
                      LPCTSTR lpPathName // 指向要删除的目录。
                      );
    返回值:非零表示成功,零表示失败。
     
    CopyFile() 介绍:
    功能:复制文件或目录。
    函数原型:BOOL CopyFile(
                      LPCTSTRlpExistingFileName,  // 指向源文件名。
                      LPCTSTR lpNewFileName, // 指向目标文件名。
                      BOOL bFailIfExists     // 文件操作标志。指明如果在目的路径存在文件时是否覆盖。
                      //如果设为TRUE(非零),将不覆盖已经存在的文件。否则覆盖已存在的文件。
                      );
    返回值:非零表示成功,零表示失败。
     
    MoveFile() 介绍:
    功能:移动文件或目录位置。
    函数原型:BOOL MoveFile(
                      LPCTSTR lpExistingFileName, // 指向源文件名。
                      LPCTSTR lpNewFileName // 指向目标文件名。
                      );
    返回值:非零表示成功,零表示失败。
     

    GetModuleFileName() 介绍:

    功能:获取当前进程已加载模块的文件的完整路径,该模块必须由当前进程加载。

    函数原型:DWORD WINAPI GetModuleFileName(

                      HMODULE  hModule,   // 表示正在被加载模块的句柄。

                                                            //如果为 NULL,则将当前可执行文件的完整路径复制到 lpFilename 中

                      LPTSTR  lpFileName,  //  指向保存完整路径的文件名。

                      DWORD  nSize       // 表示复制到 lpFileName 的最大字符数量。

                      ); 

    返回值:如执行成功,返回复制到lpFileName的实际字符数量;零表示失败。

    GetFileTitle() 介绍

    功能:从指定的文件路径中获取文件的名称。

    (例如指定文件路径为:C:UsersPublicDocumentsTest.txt,则文件名称为 Test。

    函数原型:short GetFileTitleA(
                      LPCSTR Path, // 指定的文件路径。
                      LPSTR  Buf, // 接收文件名称的缓冲区。
                      WORD  cchSize  // 缓冲区的大小。
                      );

    返回值:如果函数成功, 则返回值为零。如果文件名无效, 则返回值未知。如果出现错误, 返回值为负数。

     
    GetSystemDirectory() 介绍:
    功能:取得Windows系统目录 (System目录) 的完整路径名。
    函数原型:UINT WINAPI GetSystemDirectory(
                      LPTSTR lpBuffer,   // 指向要接收路径的缓冲区的指针。
                      UINT   uSize    // 缓冲区的最大大小.
                      );
    返回值:如果函数成功, 则返回值是复制到缓冲区的字符串的长度。如果函数失败, 则返回值为零。
     
    SetFileAttributes() 介绍:
    功能:设置文件或目录属性。
    函数原型:BOOL SetFileAttributes(

                      LPCTSTR lpFileName,     // 指定的文件名。

                      DWORD dwFileAttributes  // 文件属性(值如下表:)。

                      );

    返回值:非零表示成功,零表示失败。

    属性
    含义
    FILE_ATTRIBUTE_ARCHIVE
    该文件是一个存档文件。应用程序使用此属性来备份或移除标记文件。
    FILE_ATTRIBUTE_HIDDEN
    该文件是隐藏的。它不包括在普通的目录列表。
    FILE_ATTRIBUTE_NORMAL
    该文件没有设置其他的属性。此属性仅在单独使用有效。
    FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
    该文件将不被内容索引服务编制索引。
    FILE_ATTRIBUTE_OFFLINE
    该文件的数据不是立即可用。
    此属性表明文件数据被物理移动到离线存储。
    此属性用于通过远程存储,分层存储管理软件。
    应用程序不应随意更改此属性。
    FILE_ATTRIBUTE_READONLY
    该文件是只读的。应用程序可以读取该文件,但不能写入或删除它。
    FILE_ATTRIBUTE_SYSTEM
    该文件是操作系统的一部分,或者完全由它使用。
    FILE_ATTRIBUTE_TEMPORARY
    该文件是被用于暂时存储。文件系统避免写入数据传回海量存储
    如果有足够的缓存内存可用,因为经常在应用程序删除后不久
    ,这个句柄被关闭的临时文件。在这种情况下,该系统可以完全避免记录的数据。否则,在手柄关闭的数据将被写入。

    GetFileAttributes() 介绍:

    功能:为一个指定的文件或目录返回文件系统的属性。

    函数原型:DWORD GetFileAttributes(
                      LPCSTR lpFileName  // 指定的文件名。
                      );

    返回值:如果函数成功,返回值包含文件或目录的属性。

                  如果函数失败,返回值是INVALID_FILE_ATTRIBUTES。

    属性 含义
    FILE_ATTRIBUTE_ARCHIVE 标示一个文件(或目录)是一个存档文件(或目录)。
    FILE_ATTRIBUTE_COMPRESSED
    标示一个文件(或目录)是一个压缩文件(或目录)。
    用于文件时:该文件中所有的记录都是经过压缩的;
    用于目录时:在该目录下新建文件或子目录时会默认进行压缩。
    FILE_ATTRIBUTE_DIRECTORY 此句柄被视为一个目录
    FILE_ATTRIBUTE_ENCRYPTED
    标示一个文件(或目录)是一个加密文件(或目录)。
    用于文件时:该文件中所有的记录都是经过加密的,包括读写操作;
    用于目录时:在该目录下新建文件或子目录时会默认进行加密。
    FILE_ATTRIBUTE_HIDDEN 标示一个文件(或目录)是一个隐藏文件(或目录)。
    FILE_ATTRIBUTE_NORMAL 标示一个文件(或目录)不具有其他属性,此属性只能单独使用!
    FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 标示一个文件不可被内容索引服务索引。
    FILE_ATTRIBUTE_OFFLINE
    标示一个文件是脱机文件,该文件中的内容无法直接使用。
    如果某个文件具有该属性,请不要轻易修改此属性,它可能是某些远程存储服务程序的存储文件。
    FILE_ATTRIBUTE_READONLY
    标示一个文件(或目录)是一个只读文件(或目录)。
    用于文件时:只能读取文件内容,无法修改或删除;
    用于目录时:该目录无法删除。
    FILE_ATTRIBUTE_REPARSE_POINT 标示一个文件(或目录)拥有相关的重新解析点,比如用mklink创建的硬链接或符号链接
    FILE_ATTRIBUTE_SPARSE_FILE 标示一个文件是稀疏文件
    FILE_ATTRIBUTE_SYSTEM 标示一个文件(或目录)是一个系统文件(或目录)。
    FILE_ATTRIBUTE_TEMPORARY 标示一个文件是临时文件。
     
    DEMO CODE:
    #include<stdio.h>
    #include<Windows.h>
    int main(void)
    {
        HANDLE hFile;
        BOOL Bool;
        TCHAR lpBuffer[MAX_PATH];
        LPDWORD Num = 0;
        hFile = CreateFile("C:\Users\Public\Documents\Test.txt",
            GENERIC_ALL,
            NULL,
            NULL,
            CREATE_ALWAYS,
            FILE_ATTRIBUTE_HIDDEN,
            NULL);
        if (hFile == INVALID_HANDLE_VALUE)
        {
            printf("Create File Error!
    ");
            system("pause");
            exit(0);
        }
    
        printf("Input what you want to write:
    ");
        gets_s(lpBuffer);
    
        Bool = WriteFile(hFile,
            lpBuffer,
            MAX_PATH,
            Num,
            NULL);
    
        if (!Bool)
        {
            printf("Write File Error
    ");
            system("pause");
            exit(0);
        }
    
        CloseHandle(hFile);
        printf("Create and Write Succeed
    ");
        system("pause");
        return 0;
    }
  • 相关阅读:
    C语言I博客作业06
    C语言I博客作业05
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02
    作业01
    java ui 点点记
    eclipse修改workspace目录
    postgres恢复
    JDK1.4和JDK1.5以及1.6
  • 原文地址:https://www.cnblogs.com/M-Anonymous/p/9368742.html
Copyright © 2020-2023  润新知