永发信息网

求C++的文件操作类

答案:3  悬赏:60  手机版
解决时间 2021-11-08 00:36
  • 提问者网友:泪痣哥哥
  • 2021-11-07 00:58
求C++的文件操作类
最佳答案
  • 五星知识达人网友:第幾種人
  • 2021-11-07 01:04
**************************************************************
20100607 回答楼主提问:
CFile没有提供复制文件的函数,可以用如下方式实现:
拷贝文件用:
CopyFile
The CopyFile function copies an existing file to a new file.

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
);

这只能拷贝一个文件,如果要拷贝一个文件夹下面的全部内容的话,需要使用递归算法一个一个拷贝文件,如果遇到文件夹,得新建,然后递推,去复制文件夹离得内容!

首先要一个个找到文件夹下面的文件的路径,这时用
CFileFind fileFind;
if(!fileFind.FindFile("文件目录路径\\*.*")
{
失败!
}
else
{
findFind.FindNextFile();
CString filePath = findFind.GetFilePath();//得到了文件路径

得到了路径就可以拷贝文件了
CopyFile(filePath ,新路径)
可以用while循环一个个找出文件路径,一个个拷贝
记得如果是最后一个文件的话,FindNextFile()返回0,这是处理了这个文件,就可以退出循环,
}

新建路径用函数:
CreateDirectory
The CreateDirectory function creates a new directory. If the underlying file system supports security on files and directories, the function applies a specified security descriptor to the new directory. Note that CreateDirectory does not have a template parameter, while CreateDirectoryEx does.

BOOL CreateDirectory(
LPCTSTR lpPathName, // pointer to directory path string
LPSECURITY_ATTRIBUTES lpSecurityAttributes // pointer to security descriptor
);

我复制个别人的函数,说的很清楚,这个函数可以直接拿来用,请楼主看看!




bool CopyDir(CString strSrcPath, CString strDstPath)

{

// 创建目标文件夹

mkdir(strDstPath);

CFileFind finder;

// 打开指定的文件夹进行搜索

BOOL bWorking = finder.FindFile(strSrcPath + "\\" + "*.*");

while(bWorking)

{

// 从当前目录搜索文件

bWorking = finder.FindNextFile();

CString strFileName = finder.GetFileName();

CString strSrc = strSrcPath + "\\" + strFileName;

CString strDst = strDstPath + "\\" + strFileName;

// 判断搜索到的是不是"."和".."目录

if(!finder.IsDots())

{

// 判断搜索到的目录是否是文件夹

if(finder.IsDirectory())

{

// 如果是文件夹的话,进行递归

if(!CopyDir(strSrc, strDst))

return false;

}

else

{

// 如果是文件,进行复制

if(!CopyFile(strSrc, strDst, FALSE))

return false;

}

}

}

return true;

}

如果要删除文件夹,也是同样的递归方法,删除文件夹用RemoveDirectory(),但只能删除非空文件夹,所以删除之前必须先删除里面的所有文件,
这时,可以用CFileFind找出所有文件路径,然后用DeleteFile()函数删除.

************************************************************************
*************************************************************
第二个问题:
zip压缩/解压缩文件/目录的函数

对于压缩文件,我做过winrar格式文件的解压缩代码,就是*.rar文件,我记得winrar也可以解压缩zip文件,所以,相关代码是适用的.
如果要在VC里面实现,那么需要适用VC调用一个bat文件(批处理文件)来实现,这个就说来话长了,分两步说:第一步先说bat文件如何建立,第二步说如何用VC调用bat文件,第二步比较简单,上网很容易搜到方法,所以最后说,怕今天时间不够

至于批处理文件是个什么,这里就不多说了,如果楼主不知道的话,可以去百度知道下,很容易找到答案!

我的批处理文件内容是:
"C:\Program Files\WinRAR\Rar.exe" A -r -ep1 "D:\A_TEMP_RAR\_V1.0.1.rar" "\\Data1\\ZL007\XSJ_V1.0.1"

什么意思呢:??
1。 "C:\Program Files\WinRAR\Rar.exe" 命令行,调用程序Rar.exe,之后的批处理内容是给这个程序传进去的参数,告诉它,要压缩什么文件,压缩到哪里,如何压缩,是固实压缩还是普通压缩,压缩是否包含子文件夹等等信息.这个目录就是你安装了winrar后,运行程序的路径!
2。 A -r -ep1: A是:添加文件到压缩文件, -r是:连同子文件夹 -ep是:名称中排除路径
3。 讲"D:\A_TEMP_RAR\_V1.0.1.rar"压缩至"\\Data1\\ZL007\XSJ_V1.0.1"
用VC运行这个批处理文件,就是让命令解释器自己去打开winrar程序,告诉它怎么干,让他自己去干.

现在楼主需要做的是,用CFile新建一个文件,名字叫a.bat,往里面写入内容
如果想让"C:\a",压缩到"d:\b",那么写入的内容就是:
"C:\Program Files\WinRAR\Rar.exe" A -r -ep1 "C:\\a" "d:\b"
这是,bat文件就建立好了,具体的命令请参考"winara中文帮助",安装了winrar后,自然有这个文档,可以在开始菜单里找到.

今天没有时间了,先写这么多,只是给楼主指明个发现,这些东西网上都有现成的可以找到,有问题的话,明天中午或晚上我再回答

****************************************************************

C++相关的文件操作函数很多。

我推荐一个吧
CFile
其他的我不推荐了,C相关的函数,windowsAPI什么的,都很多,但用VC的话还是用MFC自带的类。只要了解一个就好,其他用法都差不多。

具体自己去查下,

VC里面用的话,如果用的不是MFC的类,那是很亏很麻烦的。
在网上也可以找到一些别人写的类,无非是对CFile类进行些封装。如删除一个文件夹下面所有的文件,这种功能没有直接实现的API,可以自己写,也可以直接用别人写好的函数,这个随便搜下,一大堆。

关键是楼主是在学习,还是工作上紧急要用。
学习的话,看看别人怎么写,自己学着写,大多数是二三十行代码就搞定的功能。
如果是工作上紧急要用的话,也要看到底是用些什么功能,CFile类,反正我是经常用的,没遇到过什么难的功能。

看MSDN最好,如果嫌英文麻烦,那么看MFC程序员手册,中文版的,包括所有MFC类的说明是MSDN的中文版。可以去查下,很容易就找到了。这个在开发中很有用。

楼主可以把自己遇到的问题说详细点!

如果有问题可以补充,我会继续关注,也可以给我发消息。我争取把那100分赚到手!
全部回答
  • 1楼网友:深街酒徒
  • 2021-11-07 03:00
没见过
  • 2楼网友:神的生死簿
  • 2021-11-07 02:18
呵呵,看来你要的是自己特定功能的文件操作类,
这些都需要自己封装的,
zip压缩解压的Windows没有提供,可以通过调用winrar的命令行执行。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯