Windows文件操作

来源:互联网 发布:xperia touch 知乎 编辑:程序博客网 时间:2024/06/10 00:09

文件操作的主要API函数:

1、打开文件

HANDLE WINAPI CreateFile(               LPCTSTR lpFileName,               DWORD dwDesiredAccess,               DWORD dwShareMode,               LPSECURITY_ATTRIBUTES lpSecurityAttributes,               DWORD dwCreationDisposition,               DWORD dwFlagsAndAttributes,               HANDLE hTemplateFile);
参数说明:

lpFIleName:要打开的或者创建的文件名,也可以不是文件名,可以是管道名;

dwDesiredAccess:对文件的访问模式,通常是GENERIC_READ和GENERIC_WRITE;

dwShareMode:对文件的访问模式,windows是一个多进程的操作系统,在一个文件杯访问时,可能有另一个进程也访问文件,这时第一个打开文件的进程就要对其设置一个访问模式,即打开文件后,其他进程可对文件有哪些操作;

lpSecurityAttribute:安全属性,一般为NULL;

dwCreationDisposition:在创建文件时文件存在或者不存在时该函数的处理方式;

dwFlagsAndAttribute:打开或创建文件时的标志和属性,一般是FILE_ATTRIBUTE_NORMAL;

hTemplateFile:文件模板,一般为NULL;

返回值:

若执行成功,返回一个文件句柄;

2、在对文件使用完毕之后,应该对打开的句柄进行关闭以释放资源

BOOL CloseHandle(HANDEL hObject);
3、删除文件

BOOL DeleteFile(LPCTSTR lpFileName);  //file name
4、读取文件

BOOL ReadFile(         HANDLE  fFile,         LPVOID   lpBuffer,         DWORD   nNumberOfBytesToRead,         DWORD   nNumberOfBytesRead,         LPOVERLAPPED  lpOverLapped);

参数说明:

hFile:CreateFile函数返回的句柄;

lpBuffer:指定一个缓冲区,函数从文件中读取的内容保存在这个缓冲区中;

nNumberOfBytesToRead:要求读入的字节数,通常情况下是缓冲区的大小;

nNumberOfBytesRead:保存实际读入的字节数;

lpOverLapped:一般为NULL;

5、写入文件

BOOL WriteFile(         HANDLE  fFile,         LPVOID   lpBuffer,         DWORD   nNumberOfBytesToWrite,         DWORD   nNumberOfBytesReadWrite<span style="font-family:Arial, Helvetica, sans-serif;">,</span>         LPOVERLAPPED  lpOverLapped);
参数的含义基本相同,其中第二个参数是保存将要写入文件的内容的缓冲区;

6、设置文件指针

DWORD  SetFilePointer(                         HANDLE hFile,                         LONG   lDistanceToMove,                         PLONG  lpDistanceToMoveHigh,                         DWORD dwMoveMethod);
参数说明:

hFIle:与上面的一样,表示文件的句柄;

lDistanceToMove:指定要移动的距离;

lpDistanceToMoveHigh:一个指向LONG型的指针,其保存一个要移动距离的高八位;

dwMoveMethod:指定要移动的起始位置;

7、创建目录

BOOL CreateDirectory(                        LPCTSTR lpPathName,                   LPSECURITY_ATTRIBUTES lpSecurityAttributes);

参数说明:

lpPathName:创建目录的目录名称(包含路径)

lpSecurityAttribute:一般为NULL;

8、移除目录

BOOL CreateDirectory(                       <span style="white-space:pre"></span>LPCTSTR lpPathName)

编写AutoRun的部分代码:

获取盘符,初始化组合框

void CUDlg::InitComboDriver(){char szDriverString[MAXBYTE] = {0};char *pTmp = NULL;SetDlgItemText(IDC_COMBO1,_T("请选择欲免疫的盘符..."));GetLogicalDriveStrings(MAXBYTE,szDriverString);pTmp = szDriverString;while(*pTmp){m_ComboDriver.AddString(pTmp);pTmp += 4;}}
添加免疫按钮的消息映射函数

#define AUTORUN "autorun.inf"#define IMMUNITY "\\immunity...\\"void CUDlg::OnCancel2() {// TODO: Add your control notification handler code herechar szPath[MAX_PATH] = {0};GetDlgItemText(IDC_COMBO1,szPath,MAX_PATH);strcat(szPath,AUTORUN);BOOL bRet = CreateDirectory(szPath,NULL);if(!bRet){AfxMessageBox("无法免疫该盘符!可能已经免疫,或者该盘为不可写状态!");return;}strcat(szPath,IMMUNITY);bRet = CreateDirectory(szPath,NULL);if(!bRet){AfxMessageBox("无法免疫该盘符!可能已经免疫,或者该盘为不可写状态!");return ;}}

添加取消按钮的消息映射函数

void CUDlg::OnCancel() {// TODO: Add extra cleanup herechar szPath[MAX_PATH] = {0};GetDlgItemText(IDC_COMBO1,szPath,MAX_PATH);strcat(szPath,AUTORUN);strcat(szPath,IMMUNITY);RemoveDirectory(szPath);ZeroMemory(szPath,MAX_PATH);GetDlgItemText(IDC_COMBO1,szPath,MAX_PATH);strcat(szPath,AUTORUN);RemoveDirectory(szPath);CDialog::OnCancel();}







0 0