牛骨文教育服务平台(让学习变的简单)
博文笔记

Win32学习笔记 - 文件操作

创建时间:2016-03-28 投稿人: 浏览次数:479

1.1 获取本机存在的驱动器

DWORD GetLogicalDrives(VOID);

该函数的返回值是一个无符号的32位整数,每一位代表一个驱动器,Bit 0代表驱动器A, Bit 1代表驱动器B, Bit 2代表驱动器C,依次类推。如果该位为1,表示该驱动器存在,否则不存在。

1.2 获取系统盘的盘符

DWORD GetLogicalDriveStrings( DWORD nBufferLength, LPTSTR lpBuffer );
  • nBufferLength :缓冲区的大小
  • lpBuffer:接受数据的缓冲区

1.3 获取盘符类型

UINT GetDriveType( LPCTSTR lpRootPathName );
  • lpRootPathName:盘符根目录
  • 返回值:
    • DRIVE_UNKNOWN - 驱动器类型不能确定。
    • DRIVE_NO_ROOT_DIR - 根目录不存在。
    • DRIVE_REMOVABLE - 可移动磁盘。
    • DRIVE_FIXED - 本地磁盘
    • DRIVE_REMOTE - 远程(网络)驱动器。
    • DRIVE_CDROM - CD-ROM驱动器。
    • DRIVE RAMDISK - RAM磁盘。

2.1 Windows相关的目录

2.1.1 程序当前工作目录

DWORD GetCurrentDirectory(
    DWORD nBufferLength,  
    LPTSTR lpBuffer       
);
  • nBufferLength:缓冲区的大小
  • lpBuffer:接受数据的缓冲区
BOOL SetCurrentDirectory(
    LPCTSTR lpPathName   
);
  • lpPathName:要设置的目录名

2.1.2 Windows目录

UINT GetWindowsDirectory(
    LPTSTR lpBuffer,  
    UINT uSize        
);
  • lpBuffer:接受数据的缓冲区
  • uSize:缓冲区的大小

2.1.3 Windows的System目录

UINT GetSystemDirectory(
    LPTSTR lpBuffer,  
    UINT uSize        
);
  • lpBuffer:接受数据的缓冲区
  • uSize:缓冲区的大小

2.1.4 临时文件目录

DWORD GetTempPath(
    DWORD nBufferLength,  
    LPTSTR lpBuffer       
);  
  • lpBuffer:接受数据的缓冲区
  • nBufferLength:缓冲区的大小

2.2 目录操作

2.2.1 创建目录

BOOL CreateDirectory(
    LPCTSTR lpPathName,
    LPSECURITY_ATTRIBUTES lpSecurityAttributes  
);
  • lpPathName:目录名称
  • lpSecurityAttributes:安全属性,默认为NULL

2.2.2 目录删除

BOOL RemoveDirectory(
    LPCTSTR lpPathName 
);
  • lpPathName:目录名称
    目录中不能包含子目录或文件。

2.2.3 目录移动

BOOL MoveFile(
    LPCTSTR lpExistingFileName, 
    LPCTSTR lpNewFileName
);
  • lpExistingFileName:已存在的目录
  • lpNewFileName:新的路径
    不能跨盘移动

3.1 创建或打开Windows文件

HANDLE CreateFile(
    LPCTSTR lpFileName, 
    DWORD dwDesiredAccess, 
    DWORD dwShareMode,  
    LPSECURITY_ATTRIBUTES lpSecurityAttributes, 
    DWORD dwCreationDisposition,  
    DWORD dwFlagsAndAttributes, 
    HANDLE hTemplateFile 
);
  • lpFileName:文件名称
  • dwDesiredAccess:访问权限
  • dwShareMode:共享方式
  • lpSecurityAttributes:安全属性,默认为NULL
  • dwCreationDisposition:创建方式
  • dwFlagsAndAttributes:文件属性
  • hTemplateFile:文件句柄模板,默认为NULL
    成功返回文件句柄。

3.2 写数据

BOOL WriteFile(
  HANDLE hFile, 
  LPCVOID lpBuffer, 
  DWORD nNumberOfBytesToWrite, 
  LPDWORD lpNumberOfBytesWritten, 
  LPOVERLAPPED lpOverlapped  
);
  • hFile:文件句柄
  • lpBuffer:数据BUFF
  • nNumberOfBytesToWrite:数据长度
  • lpNumberOfBytesWritten:返回实际写入的数据
  • lpOverlapped:默认为NULL

3.3 读数据

BOOL ReadFile(
  HANDLE hFile, 
  LPVOID lpBuffer,  
  DWORD nNumberOfBytesToRead,  
  LPDWORD lpNumberOfBytesRead, 
  LPOVERLAPPED lpOverlapped    
);
  • hFile:文件句柄
  • lpBuffer:数据BUFF
  • nNumberOfBytesToRead:要读的字节数
  • lpNumberOfBytesRead:实际读到字节数
  • lpOverlapped:默认为NULL

3.4 关闭文件

BOOL CloseHandle(
  HANDLE hObject   
);
  • hObject:文件句柄

3.5 文件长度

DWORD GetFileSize(
  HANDLE hFile, 
  LPDWORD lpFileSizeHigh
); 
  • hFile:文件句柄
  • lpFileSizeHigh:文件长度的高32位
    返回值是文件长度的低32位

3.6 文件指针

DWORD SetFilePointer(
  HANDLE hFile, 
  LONG lDistanceToMove, 
  PLONG lpDistanceToMoveHigh,  
  DWORD dwMoveMethod
); 
  • hFile:文件句柄
  • lDistanceToMove:偏移量的低32位
  • lpDistanceToMoveHigh:偏移量的高32位
  • dwMoveMethod:偏移的相对位置
    SetFilePointer函数返回实际偏移量的低32位,lpDistanceToMoveHigh返回实际偏移量的高32位

3.7 文件相关操作

  • CopyFile - 拷贝文件
  • DeleteFile - 删除文件
  • MoveFile - 移动文件

3.8 文件属性

  • GetFileAttributes - 获取文件属性
  • SetFileAttributes - 设置文件属性
  • GetFileAttributesEx - 获取文件属性、时间等

3.9 文件查找

3.9.1 查找文件

    HANDLE FindFirstFile(
      LPCTSTR lpFileName, 
      LPWIN32_FIND_DATA lpFindFileData  
    );  
  • lpFileName:查找路径
  • lpFindFileData:查找的数据
    返回查找句柄

3.9.2 获取下一个文件

    BOOL FindNextFile(
      HANDLE hFindFile, 
      LPWIN32_FIND_DATA lpFindFileData 
    ); 
  • hFindFile:查找句柄
  • lpFindFileData:查找的数据
    找到返回TRUE

3.9.3 关闭查找

BOOL FindClose(
  HANDLE hFindFile   
);
  • hFindFile:查找句柄
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。