数据结构与算法:树的遍历算法实现Xcopy

2008-3-6 10:31:26   Count:
    在文件系统中,经常会复制某个目录下的所有文件和子目录及其包含的文件到另外一个目录中,在DOS操作系统中,实现这个功能的命令名叫Xcopy,下面就使用树的递归遍历算法来实现这个Xcopy功能。

    下面以流行的Windows操作系统来实现这个功能,实现编码如下。
    #include <windows.h>       
    /**     将一个目录及子目录下的所有文件复制到另外一个目录下
     
              @param     char *pszSrcDir - 要拷贝的源目录     
              @param     char *pszTargeDir - 目标目录    
              @param     BOOL bOverWrite - 覆盖标志,FALSE表示覆盖 
              @return     void - 无 
    */
    void Xcopy( char *pszSrcDir, char *pszTargeDir, BOOL bOverWrite )
    {
         char                     lBaseSearch[MAX_PATH];
         HANDLE                     lhFile;
         WIN32_FIND_DATA         lfData;
     
         sprintf( lBaseSearch, "%s\\*.*", pszSrcDir );
         lhFile = FindFirstFile( lBaseSearch, &lfData );
         if ( lhFile == INVALID_HANDLE_VALUE ) {
                  return;
         }
         do {
                  CreateDirectory( pszTargeDir, NULL );
                  if (     !strcmp( lfData.cFileName, "." ) ||
                                     !strcmp( lfData.cFileName, ".." )) {
                            /* 跳过 . and .. 不处理 */
                            continue;
                  }
                  if ( lfData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) {
                            /* 目录 */
                            char   szBaseDir[MAX_PATH];
                            char   szTargeDir[MAX_PATH];
     
                            sprintf( szBaseDir, "%s\\%s", pszSrcDir, lfData.cFileName );
                            sprintf( szTargeDir, "%s\\%s", pszTargeDir, lfData.cFileName );
                            Xcopy( szBaseDir, szTargeDir, bOverWrite );
                  }
                  else {
                            /* 普通文件 */
                            char   szBaseDir[MAX_PATH];
                            char   szTargeDir[MAX_PATH];
     
                            sprintf( szBaseDir, "%s\\%s", pszSrcDir, lfData.cFileName );
                            sprintf( szTargeDir, "%s\\%s", pszTargeDir, lfData.cFileName );
     
                            CopyFile( szBaseDir, szTargeDir, bOverWrite );
                  }
         } while ( FindNextFile( lhFile, &lfData ));
         FindClose( lhFile );
    }

浏览该文章的用户为您推荐了该信息: 
       
   
   
 
站内检索:
本月授课安排
栏目导航
阅读排行