Windows文件操作

文件操作的主要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 here
	char 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 here
	char 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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值