- 论坛徽章:
- 0
|
c语言有目录拷贝和遍历的函数吗?是否支持中文目录的整个拷贝?
自编的一个函数:
/**************************************************************************
* 删除目录树
* BOOL DelFileTree(LPCTSTR sSourceDir, BOOL lReserveDir)
* 参数:
* IfValidUser - 检验合法使用字符串
* sDir - 目录名
* 返回值:
* TRUE - 正确
* FALSE - 出错
*************************************************************************/
BOOL DelFileTree(LPCTSTR sSourceDir, BOOL lReserveDir=FALSE)
{
struct _finddata_t c_file;
long hFile;
CString bstr, sFiles;
sFiles.Empty ();
sFiles += sSourceDir;
sFiles.TrimLeft ();
sFiles.TrimRight ();
int nLen = sFiles.GetLength ();
if (sFiles.GetAt (nLen-1) != 92)
sFiles += "\\";
sFiles += "*.*";
if( (hFile = _findfirst( LPCTSTR(sFiles), &c_file )) == -1 )
;
else
{
if ( (c_file.attrib & _A_SUBDIR) ) // Is Directory
{
if ( ! (strcmp(c_file.name, "." ==0 || strcmp(c_file.name, ".." == 0) )
{
sFiles.Empty ();
sFiles += sSourceDir;
sFiles += "\\";
sFiles += c_file.name;
DelFileTree(LPCTSTR(sFiles), FALSE);
}
}
else
{
sFiles.Empty ();
sFiles += sSourceDir;
sFiles += "\\";
sFiles += c_file.name;
SetFileAttributes(LPCTSTR(sFiles), FILE_ATTRIBUTE_NORMAL);
DeleteFile(LPCTSTR(sFiles));
}
while( _findnext( hFile, &c_file ) == 0 )
{
if ( (c_file.attrib & _A_SUBDIR) ) // Is Directory
{
if ( ! (strcmp(c_file.name, "." ==0 || strcmp(c_file.name, ".." == 0) )
{
sFiles.Empty ();
sFiles += sSourceDir;
sFiles += "\\";
sFiles += c_file.name;
DelFileTree(LPCTSTR(sFiles), FALSE);
}
}
else
{
sFiles.Empty ();
sFiles += sSourceDir;
sFiles += "\\";
sFiles += c_file.name;
SetFileAttributes(LPCTSTR(sFiles), FILE_ATTRIBUTE_NORMAL);
DeleteFile(LPCTSTR(sFiles));
}
}
_findclose( hFile );
}
if (!lReserveDir) // 如果不保留该目录,则删除
{
SetFileAttributes(sSourceDir, FILE_ATTRIBUTE_NORMAL);
RemoveDirectory(sSourceDir);
}
return TRUE;
} |
|