求C++的文件操作类
用不用MFC都没关系,只要语法正确,大多数高级文件操作功能都在,能在VC里用就可以啦~~~拜托1L,请问CFile复制目录操作的函数在哪里?zip压缩/解压缩文件/目录的...
用不用MFC都没关系,只要语法正确,大多数高级文件操作功能都在,能在VC里用就可以啦~~~
拜托1L,请问CFile复制目录操作的函数在哪里?zip压缩/解压缩文件/目录的函数又在哪里? 展开
拜托1L,请问CFile复制目录操作的函数在哪里?zip压缩/解压缩文件/目录的函数又在哪里? 展开
展开全部
**************************************************************
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
);
我复制个别人的函数,说的很清楚,这个函数可以直接拿来用,请楼主看看!
/***********************************************************************/
/* \函数名称:CopyDir
* \函数功能:复制文件夹
* \函数返回:bool
如果是true,复制成功,否则失败。
* \参数说明:
@param CString strSrcPath 源文件夹
@param CString strDstPath 目标文件夹
/***********************************************************************/
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分赚到手!
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
);
我复制个别人的函数,说的很清楚,这个函数可以直接拿来用,请楼主看看!
/***********************************************************************/
/* \函数名称:CopyDir
* \函数功能:复制文件夹
* \函数返回:bool
如果是true,复制成功,否则失败。
* \参数说明:
@param CString strSrcPath 源文件夹
@param CString strDstPath 目标文件夹
/***********************************************************************/
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分赚到手!
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询