[WinAPI] API 9 [文件的删除、复制和移动功能]
Windows系统为文件的删除、复制、重命名或移动文件提供了相应的API函数。删除文件使用DeleteFile函数;复制文件使用CopyFile函数;重命名文件和移动文件实际是一个操作,使用MoveFile函数。这几个函数的使用都非常简单,下面分别介绍。
(1) DeleteFile。
DeleteFile的功能是删除文件。以文件路径作为输入,指向需要删除的文件。文件路径可以是类似于“c:\files\delete.txt”的绝对路径,也可以是类似于“.\delete.txt”的相对路径,二相对于可执行文件所在的路径。
◇参数
lpFileName:输入参数,所要删除的文件的相对路径或绝对路径。
◇返回值
返回BOOL值,表示文件删除是否成功。
◇使用说明
如果程序返回失败,可以使用GetLastError函数获取错误信息。
(2) CopyFile。
CopyFile的功能是复制文件。通过参数输入复制文件和源路径和目的路径,路径可以是绝对路径也可以是相对路径,还可以通过参数指明如果目的路径已经存在文件,是否覆盖。可以使用CopyFileEx函数进行更为高级的操作,比如在复制进行过程中取消复制等。CopyFileEx可以指定
一个回调函数来处理文件复制中所可能发生的各种情况。
◇参数
lpExistingFileName:输入参数,已经存在的所需复制文件的源路径。
lpNewFileName:输入参数,新文件路径,复制文件的目的路径。
bFailIfExists:输入参数,指明如果在目的路径存在文件时是否覆
将不覆盖已经存在的文件,如果存在,则返回失败。这时使用GetLastError获取错误代码,将返回80(Ox50)。
◇返回值
返回BOOL值,表示文件复制是否成功。
◇使用说明
如果程序返回失败,可以使用GetLastError函数获取错误信息。
(3) MoveFile。
MoveFile的功能是移动、重命名文件和目录。通过参数输入源路径和目的路径,路径可以是绝对路径也可以是相对路径,如果目的路径的文件或目录已经存在,则返回失败。可以使用MoveFileEx函数来指定更多的选项,如果已经存在是否替换等。还可以使用MoveFileWithProgress指定一个回调函数来处理文件移动中所可能发生的各种情况。
◇参数
lpExistingFileName:输入参数,为已经存在的所需移动文件的源路径。
lpNewFileName:输入参数,新文件路径,移动文件的目的路径。
◇返回值
返回BOOL值,表示文件移动是否成功。
◇使用说明
如果程序返回失败,可以使用GetLastError函数获取错误信息。
(4) CopyFileEx、MoveFileEx以及MoveFileWithProgreSS.
这3个API函数功能更丰富,不再做详细介绍.
本实例使用DeleteFile、CopyFile、MoveFile来完成文件的删除、复制和移动功能。编译生成可执行文件,通过参数来指定程序完成的功能。-d参数表示删除文件,后面跟所需删除的文件路径;-m参数表示移动、重命名文件,之后的参数分别是源路径和目的路径;-c参数表示复制文件,之后跟源路径和目的路径。在复制文件过程中,如果文件已经存在,会提醒用户是否覆盖。
/* ************************************
*《精通Windows API》
* 示例代码
* wr.c
* 4.3.2 创建、打开、读写文件,获取文件大小
**************************************/ /* 头文件 */
#include <windows.h>
#include <stdio.h> /* ************************************
* DWORD ReadFileContent(LPSTR szFilePath)
* 功能 获取文件大小
* 读取文件内容,并以16进制的形式打印出来
* 参数 LPSTR szFilePath
* 文件路径
**************************************/
DWORD ReadFileContent(LPSTR szFilePath)
{
//文件大小
HANDLE hFileRead;
//保存文件大小
LARGE_INTEGER liFileSize;
//成功读取的文件数据大小
DWORD dwReadedSize;
//累加计算已经读取数据的大小
LONGLONG liTotalRead = ;
//文件数据缓存
BYTE lpFileDataBuffer[]; //打开已经存在的文件,读取内容。
hFileRead = CreateFileA(szFilePath,// 要打开的文件名
GENERIC_READ, // 以读方式打开
FILE_SHARE_READ, // 可共享读
NULL, // 默认安全设置
OPEN_EXISTING, // 只打开已经存在的文件
FILE_ATTRIBUTE_NORMAL, // 常规文件属性
NULL); // 无模板 //打开文件是否成功。
if(hFileRead==INVALID_HANDLE_VALUE)
{
printf("打开文件失败:%d",GetLastError());
} if(!GetFileSizeEx(hFileRead,&liFileSize))
{
printf("获取文件大小失败:%d",GetLastError());
}
else
{
printf("文件大小为:%d/n",liFileSize.QuadPart);
} //循环读取并打印文件内容
while(TRUE)
{
DWORD i; if(!ReadFile(hFileRead, //读文件的句柄
lpFileDataBuffer, //存储读取的文件内容
, //读的大小(字节)
&dwReadedSize, //实际读取的大小
NULL)) //不使用Overlapped
{
printf("读文件错误:%d/n",GetLastError());
break;
}
printf("读取了%d字节,文件内容是:",dwReadedSize); for(i=; i<dwReadedSize; i++)
{
printf("0x%x ",lpFileDataBuffer[i]);
}
printf("/n");
liTotalRead += dwReadedSize;
if(liTotalRead == liFileSize.QuadPart)
{
printf("读文件结束/n");
break;
}
}
CloseHandle(hFileRead);
return ;
} /* ************************************
* SaveDataToFile
* 功能 将数据存储到文件末尾
* 参数 LPSTR szFilePath 文件路径
* LPVOID lpData 需存储的数据
* DWORD dwDataSize 数据大小(字节)
**************************************/
DWORD SaveDataToFile(
LPSTR szFilePath,
LPVOID lpData,
DWORD dwDataSize)
{
//文件句柄
HANDLE hFileWrite;
//成功写入的数据大小
DWORD dwWritedDateSize; //打开已经存在的文件,读取内容。
hFileWrite = CreateFileA(szFilePath, // 要打开的文件名
GENERIC_WRITE, // 以写方式打开
, // 可共享读
NULL, // 默认安全设置
OPEN_ALWAYS, // 打开已经存在的文件,没用则创建
FILE_ATTRIBUTE_NORMAL, // 常规文件属性
NULL); // 无模板 //判断是否打开成功
if(hFileWrite==INVALID_HANDLE_VALUE)
{
printf("打开文件失败:%d/n",GetLastError());
} //设置文件指针到文件尾
SetFilePointer(hFileWrite,,,FILE_END); //将数据写入文件
if(!WriteFile(hFileWrite,lpData,dwDataSize,&dwWritedDateSize,NULL))
{
printf("写文件失败:%d/n",GetLastError());
}
else
{
printf("写文件成功,写入%d字节。/n",dwWritedDateSize);
}
CloseHandle(hFileWrite);
return ;
} /* ************************************
* int main(void)
* 功能 演示使用SaveDataToFile和ReadFileContent函数
**************************************/
int main(void)
{
LPSTR szFileData = "这是一个例子";
SaveDataToFile("C://show.txt",szFileData,lstrlenA(szFileData));
ReadFileContent("C://show.txt");
return ;
}
[WinAPI] API 9 [文件的删除、复制和移动功能]的更多相关文章
- SharePoint JavaScript API 根据文件路径删除文件
最近,有这么个需求,然后写了几行代码,记录一下.有需要的可以参考一下. 有几个需要注意的地方,就是文件URL要传相对地址,使用网站对象之前要Load一下. 当然,如果你的网站不在根路径下,还可以用oW ...
- Linux常用命令,查看树形结构、删除目录(文件夹)、创建文件、删除文件或目录、复制文件或目录(文件夹)、移动、查看文件内容、权限操作
5.查看树结构(tree) 通常情况下系统未安装该命令,需要yum install -y tree安装 直接使⽤tree显示深度太多,⼀般会使⽤ -L选项⼿⼯设定⽬录深度 格式:tree -L n [ ...
- Linux_文件及文件夹[创建][复制][移动][删除][重命名]
一.文件/文件夹创建 1.文件的创建 touch , vi/vim/nano , ... 语 法: touch [-acfm][-d <日期时间>][-r <参考文件或目 录&g ...
- ASP FSO操作文件(复制文件、重命名文件、删除文件、替换字符串)
ASP FSO操作文件(复制文件.重命名文件.删除文件.替换字符串)FSO的意思是FileSystemObject,即文件系统对象.FSO对象模型包含在Scripting 类型库 (Scrrun.Dl ...
- java实现基于关键字的文件夹(文件)的搜索、文件夹(文件)的复制、删除
最近在做一个项目,需要实现这几项功能,上网查了很多资料,自己研究了好几天终于实现了,现在与大家分享一下. 一.JAVA实现文件夹的搜索 在百度搜索N个技术文章,从哪些大牛们共享的资料中终于写出了我 ...
- Web API与文件操作
前段时间,一直有练习ASP.NET MVC与Web API交互,接下来,Insus.NET再做一些相关的练习,Web API与文件操作,如POST文件至Web API,更新或是删除等. 不管怎样,先在 ...
- MFC通过txt查找文件并进行复制-备忘
MFC基于对话框的Demo txt中每行一个23位的卡号. 文件夹中包含以卡号命名的图像文件.(fpt或者bmp文件) 要求遍历文件夹,找到txt中卡号所对应的图像文件,并复制出来. VC6.0写的. ...
- SQL2005删除复制数据库的发布与订阅的方法(转载)
SQL2005删除复制数据库的发布与订阅的方法 --在测试环境中恢复从正式数据库服务器 上备份下来的bak文件后,正式环境里数据库复制的发布.订阅也被带进来了,结果恢复的数据库无法更改表结构,直接删除 ...
- Mac下关于——你不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效。文件的删除
内容是google的,测试有效,因为用revel打包的东西删除以后有这个循环bug Mac下关于——你不能拷贝项目“”,因为它的名称太长或包括的字符在目的宗卷上无效.文件的删除 关于这个问题我找到的一 ...
随机推荐
- MySQL Innodb的两种表空间方式
要说表空间,MySQL的表空间管理远远说不上完善.换句话说,事实上MySQL根本没有真正意义上的表空间管理.MySQL的Innodb包含两种表空间文件模式,默认的共享表空间和每个表分离的独立表空间.只 ...
- OC 框架组织架构图
- swift 批量 取出中间文本
func stringmid_pl (wholestring:String,front:String,behind:String,inout return_string:String,getheroi ...
- 转 对菜鸟开发者的叮咛:花一万个小时练习Coding,不要浪费一万小时无谓地Debugging
原文见http://blog.jobbole.com/74825/ Coding 之于科技的重要性不言可喻,也不再是软体工程师的专利,医师.律师.会计师.护理师.金融从业人员,甚至是听起来摸不着边的政 ...
- 双机相关知识(原理、LVM、Raid技术)
1 双机知识 1.1 预备知识 1.1.1 基本概念 双机热备:双机热备双机管理软件可以根据心跳自动检测环境运行情况,如果发现一个节点挂掉了,会自动切换到另外一个 ...
- confirm确认对话框
还记得之前的javascript入门里的讲的confirm 消息对话框吗?不记得也没关系,我们先来回顾一下,然后在详细讲它. 复习: confirm 消息对话框通常用于允许用户做选择的动作,如:“你对 ...
- java异常与处理
1:Java中的所有不正常类都继承于Throwable类.Throwable主要包括两个大类,一个是Error类,另一个是Exception类: 2:其中Error类中包括虚拟机错误和线程死锁,一旦E ...
- 转:pack URI in WPF
一开始看到WPF里面经常用如下语句来构造资源文件Uri: Uri uri = new Uri("/AssemblyName;component/image.png"); 我还以为这 ...
- hdu 5791 (DP) Two
hdu 5791 Two Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- 咏南CS插件开发框架也可BS方式部署
在几分钟的时间内,CS客户端也可以BS方式部署.