Windows文件操作
2021-03-28 08:25
标签:UNC handle max line 完整 receive one imm gen 在windows中有多种文件,图片、视频、音乐等等。此些文件皆存于磁盘上,只是存储格式不同。此外,管道、邮槽,亦或是设备对象,于windows而言,皆为文件。 与c,c++操作文件一样,要操作文件,首先需要打开文件。文件打开成功后会返回一个可用于操作文件的句柄,通过此句柄便可对文件进行读写操作。 此函数既可打开文件,也可创建文件,在windows下也有一个OpenFile()函数,这是Win16的产物,在Win32下必须使用CreateFile()来打开文件。 文件操作完成后,需要关闭打开文件的句柄以释放资源,函数如下: 该函数不仅可关闭文件句柄,还可关闭事件句柄、进程句柄、线程句柄等等对象句柄。 此函数只有一个参数,表示要删除文件的名称。 此函数和ReadFile()函数的参数意义基本相同,WriteFile()函数的第二个参数仍指向一个缓冲区,ReadFile()函数是将读入的内容存入此中,而WriteFile()函数是将之中的内容进行写入。 当用WriteFile()函数写文件时,windows会将数据暂时保存在内部的高速缓存中,操作系统定时进行盘写入,这样就避免的频繁的I/O操作,提高了效率。为了保证数据即时写入,可以使用FlushFileBuffers()函数: 此函数清空指定文件句柄的缓冲区,从而使Windows将缓冲区中的文件写入磁盘。这里的句柄和WriteFile()与ReadFile()所使用的文件句柄相同。 在进行文件读取之时,往往需要读取文件的某个部分,这便需对文件指针进行移动,从而正确读写。 移动文件指针函数为: 第一个参数是文件名称,第二个参数是要设置的属性,这些属性是一些宏定义,以FILE_ATTRIBUTE_开头。MSDN中描述如下 该函数以字符串的形式返回本地所有可用的驱动器名保存在lpBuffer中。 lpRootPathName保存获取的逻辑驱动器类型的驱动器名。函数的返回值为以下之一: 参数指定了要移除的目录名。 该程序利用autorun.inf文件模拟U盘病毒,当该程序在U盘上时,它会将自己拷贝到所有磁盘目录上,并生成autorun.inf文件,这两个文件的属性都被设置为隐藏。当该程序在磁盘上时,若有可移动磁盘,它将会做同样操作到可移动磁盘上。 Windows文件操作 标签:UNC handle max line 完整 receive one imm gen 原文地址:https://www.cnblogs.com/coolcpp/p/windowsfile.html1. 文件的打开和关闭
打开文件
HANDLE CreateFile(
LPCTSTR lpFileName,
DWORD dwDesiredAccess,
DWORD dwShareMode,
LPSECURITY_ATTRIBUTES lpSecurityAttributes,
DWORD dwCreationDisposition,
DWORD dwFlagsAndAttributes,
HANDLE hTemplateFile
);
参数说明:
|——FILE_SHARE_DELETE:表示随后打开操作对象只有删除访问请求会成功。
|——FILE_SHARE_READ:表示随后打开操作对象只有请求读访问会成功。
|——FILE_SHARE_WRITE:表示随后打开操作对象只有请求写访问。
|——CREATE_NEW: 创建文件;如文件存在则会出错。
|——CREATE_ALWAYS: 创建文件,会改写前一个文件。
|——OPEN_EXISTING: 文件必须已经存在。由设备提出要求。
|——OPEN_ALWAYS: 如文件不存在则创建它。
|——TRUNCATE_EXISTING: 将现有文件缩短为零长度。
|——FILE_ATTRIBUTE_ARCHIVE: 标记归档属性。
|——FILE_ATTRIBUTE_COMPRESSED: 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式。
|——FILE_ATTRIBUTE_NORMAL: 默认属性。
|——FILE_ATTRIBUTE_HIDDEN: 隐藏文件或目录。
|——FILE_ATTRIBUTE_READONLY: 文件为只读。
|——FILE_ATTRIBUTE_SYSTEM: 文件为系统文件。
|——FILE_FLAG_OVERLAPPED: 允许对文件进行重叠操作。Return Value:
BOOL CloseHandle(
HANDLE hObject //handle to object
);
2.文件的基本操作
删除文件
BOOL DeleteFile(
LPCTSTR lpFileName
);
读取文件
BOOL ReadFile(
HANDLE hFile, //handle to file
LPVOID lpBuffer, //data buffer
DWORD nNumberOfBytesToRead, //number of bytes to read
LPDWORD lpNumberOfBytesRead, //number of bytes read
LPOVERLAPPED lpOverlapped //overlapped buffer
);
参数说明:
写入文件
BOOL WriteFile(
HANDLE hFile, //handle to file
LPCVOID lpBuffer, //data buffer
DWORD nNumberOfBytesToWrite, //number of bytes to write
LPDWORD lpNumberOfBytesWritten, //number of bytes written
LPOVERLAPPED lpOverlapped //overlapped buffer
);
BOOL FlushFileBuffers(
HANDLE hFile //handle to file
);
设置文件指针
BOOL SetFilePointer(
HANDLE hFile, //handle to file
LONG lDistanceToMove, //bytes to move pointer
PLONG lpDistanceToMoveHigh, //bytes to move pointer
DWORD dwMoveMethod //starting point
);
参数说明:
拷贝文件
BOOL CopyFile(
LPCTSTR lpExistingFileName,
// pointer to name of an existing file
LPCTSTR lpNewFileName, // pointer to filename to copy to
BOOL bFailIfExists // flag for operation if file exists
);
参数说明:
设置文件属性
BOOL SetFileAttributes(
LPCTSTR lpFileName, // pointer to filename
DWORD dwFileAttributes // attributes to set
);
3. 驱动器及目录相关操作
获取本地所有逻辑驱动器:
DWORD GetLogicalDriveStrings(
DWORD nBufferLength, //size of buffer
LPTSTR lpBuffer //drive strings buffer
);
参数说明:
获取驱动器类型函数
UINT GetDriveType(
LPCTSTR lpRootPathName //root directory
);
DRIVE_UNKONWN 无法识别此驱动器类型
DRIVE_NO_ROOT_DIR 无效的驱动器路径
DRIVE_REMOVEABLE 可移动驱动器,如U盘、移动硬盘等
DRIVE_FIXED 不可移动驱动器,指硬盘
DRIVE_REMOTE 网络驱动器
DRIVE_CDROM 光盘驱动器
DRIVE_RAMDISK 虚拟驱动器
获取文件路径
DWORD GetModuleFileName(
HMODULE hModule, // handle to module to find filename for
LPTSTR lpFilename, // pointer to buffer to receive module path
DWORD nSize // size of buffer, in characters
);
创建目录的函数
BOOL CreateDirectory(
LPCTSTR lpPathName, //directory name
LPSECURITY_ATTRIBUTES lpSecurityAttributes //SD
);
参数说明:
移除目录的函数
BOOL RemoveDirectory(
LPCTSTR lpPathName //directory name
);
4. 示例程序
#define _CRT_SECURE_NO_WARNINGS
#include