天天看点

文件(文件夹)删除拷贝操作类

文件(文件夹)相关操作.以下各种讨论基于windows+vc7.0开发环境.

实现文件(文件夹)操作的方式和函数多种多样,在这里我们只是很浅显讨论其中的一两中方法的应用.如果你想了解更多的请参考你编译系统的的帮助文件.也可以和我讨论:

msn:[email protected]

为了更好的对文件(文件夹)进行操作,我们先讲解一些基本知识.最后我们将实现一个基于我们自己方法的文件(文件夹)create,copy,delete等操作的类.,如果你对文件(文件夹)操作已经非常熟悉,可以跳过前边部分;在这个过程中,我们分别用api方式,和用c/c++自身附带的文件操作方式进行文件操作.

1:查找一个文件是否存在;

在打开一个文件前,判断一个文件是否存在很重要.我们可以通过cfilefind类来查找指定目录的下的文件是否存在,我们可以借助mfc,使用windows api函数.

cfilefind find;// 定义find对象.

bool bstate =find.findfile(_t("c://temp/a.txt"));// 输入要查找的文件名

if(bstate)

{

     afxmessagebox(_t("找到文件"));

     // 找到文件相应处理

}

else

     afxmessagebox(_t("没有找到文件是否创建"));

// 是否创建文件

这样我们就可以判断一个文件是否存在了.

你也可以用pathfileexists()函数判断文件是否存在,需要包括#include <shlwapi.h>库文件

2:创建,复制,删除一个文件.

复制,删除一个文件我们可以使用windows api函数来完成,我们分别来实现.

请记住一点我们在操作文件时,不能对文件目录进行创建.举个例子说明:

如果我们当前目录是c:/temp/在这个目录下没有存在c:/temp/temp,如果我们创建,复制,删除一个文件c:/temp/temp/a.txt都将失败.也正是因为这一点,我才觉的有必要写这片文章.

1)文件创建

我们可以使用系统的createfile不过参数比较多,应用比较复杂,可以用这个函数创建普通文件,也就创建管道(pipe)可以用于网络,也就用于本地等.我们的目的就是实现简单的文件操作所以没有应用这么复杂的函数.

cfile file(_t("c://temp/a.txt"),cfile::modecreate|cfile::readonly);

     // 我们可以用cfile类,当然象stl中fstream,ostream,c中的fopen都可以,

     // 以创建模式打开一个文件cfile::modecreate,stl中是ios_base::trunc

     // 如果文件c:/temp/a.txt存在,我们就读取文件,如果不存在我们就创建

2)文件复制

copyfile(_t("c://temp/a.txt"),t("c://temp/b.txt"),true);

     // copyfile参数说明,参数1:要复制的文件名,2:复制文件的新文件名,

     // 3;是否覆盖,如果发现参数2指定的文件名已经存在,当为true是表示

     // 覆盖,false时表示不覆盖.

     // 说明.输入的参数2不能包括新目录内,记此函数只能创建文件,不能创建文件夹

3)文件删除

deletefile(_t("c://temp/a.txt"));

     // 参数说明,参数表示要删除的文件名

3:创建删除一个目录(文件夹)

如何系统创建一个目录和文件夹.

1):创建一个目录

createdirectory(_t("c:/temp"),null);

     // 第一个参数是要创建的文件目录名,第二个参数是文件夹的属性.

     // 记住:我们只能从一级目录创建一级目录.

2)删除一个目录

removedirectory(_t("c:/temp"));

     // 删除目录,

     // 记住:只能从内层目录一层一层向外删除,删除目录时,首先要删除里面的文件,不然无法删除

应用上面基本知识,我们定义一个自己的类,实现文件(文件夹)删除复制,以及同级文件夹的大小,文件夹内文件的数量.定义如下操作.

// 拷贝文件

void ucopy(lpctstr soriginalfile,lpctstr snewfile,bool bskipifexists = false);

// 拷贝文件夹

void ucopyfolder(lpctstr soriginalfolder,lpctstr snewfolder,bool bskipifexists = false);

// 获取文件大小,字节数

long ugetfilebytessize(lpctstr soriginalfile);

// 获取文件夹的大小,字节数

long ugetfolderbytessize(lpctstr szfolderr,bool bsubfolder = true);

// 创建文件夹

bool ucreatefolder(lpctstr szfolde);

// 获得文件夹内文件数量

int ugetfolderfiles(lpctstr szfolder,bool bsubfolder = true);

// 删除文件(最后一项指定是否彻底删除,彻底删除后数据无法恢复)

void udeletefile(lpctstr szfile,bool bquietdelete = false);

// 删除文件夹(最后一项指定是否彻底删除,,彻底删除后数据无法恢复)

void udeletefolder(lpctstr szfolder, bool bsubfolder = true, bool bquietdelete = false);

// 关闭应用程序(如果删除,复制应用程序时,应用程序必须是关闭状态的),需要用户判断关闭.

bool ucloseapplication(lpctstr szfolder,bool baskuser = false);

如何使用?

在要使用的文件中加入.

#include "ufile.h"

定义如下变量

cufile file;

可以使用功能

file.ucloseapplication("c://temp//cmd.exe",true);

file.ucopyfolder("c://temp","d://temp");

int folderfiels = file.ugetfolderfiles("c://temp");

long foldersize = file.ugetfolderbytessize("d://temp");

foldersize = file.ugetfilebytessize("d://temp//cmd.exe");

file.udeletefolder("d://temp");

file.ucreatefolder("c://temp//temp//temp//temp//tes.txt");

file.ucopy("c://temp//test.htm","d://temp//test.htm");

file.udeletefile("c://temp//test.htm",true);

下载这类请到http://www.exuetang.net