語言:c
++環境:
windows10 x64 visual sudio 2013
linux ubuntu16.04 gcc
說明:封裝了乙個類用於複製資料夾到另一指定目錄,
不刪除原始檔,
不改變原始檔
/資料夾名。
注意:只能複製指定資料夾下的檔案,
無法處理子目錄(以後再改),
windows
下要用絕對路徑。
成員描述:1、
void copy(const std::string& srcdirpath, const std::string& desdirpath);
型別:公有。
功能:入口函式,給定源資料夾路徑()、和目的資料夾路徑,會將源資料夾整個存入目標路徑下(而不是只儲存內容)。
2、
bool make_dir ( const std::string& pathname);
型別:私有。
功能:用於執行建立資料夾操作,需要提供包含路徑的完整資料夾名稱
3、
bool get_src_files_name(std::vector& filenamelist);
型別:私有。
功能:遍歷源資料夾下所有檔名,並存入
list
中。4、
void do_copy(const std::vector& filenamelist);
型別:私有。
功能:對資料夾下的檔案進行拷貝操作,使用到了
openmp
做並行支援,簡單使用方法見我另外幾篇博文。
**:
copy_dir.h 檔案
/**
* author : ladd7
*/#ifndef copydir_h
#define copydir_h
#include #include class copydir
;#endif // copydir_h
copy_dir.cpp 檔案
/**
* author : ladd7
*/#include "copy_dir.h"
#include #include #include #if defined(_win32)
# include # include # include # include # include #else // linux
# include # include # include # include # include #endif
copydir::copydir()
void
copydir::copy(const std::string& srcdirpath, const std::string& desdirpath)
if(n == 0)
srcdir = srcdirpath.substr(n-1, srcdirpath.size());
#else // linux
int n = 0;
while (srcdirpath.find('/', n) != std::string::npos)
if(n == 0)
srcdir = srcdirpath.substr(n-1, srcdirpath.size());
#endif
this->desdirpath = desdirpath + srcdir;
if(!make_dir(this->desdirpath))
std::vectorfilenamelist;
if(!get_src_files_name(filenamelist))
if(filenamelist.empty())
do_copy(filenamelist);
}bool
copydir::make_dir (const std::string& pathname)
#else // linux
if(::mkdir(pathname.c_str(), s_irwxu | s_irgrp | s_ixgrp) < 0)
#endif
return true;
}bool
copydir::get_src_files_name(std::vector& filenamelist)
else
} _findclose(lf);
#else // linux
dir *dir;
struct dirent *ptr;
if ((dir=opendir(this->srcdirpath.c_str())) == null)
while ((ptr=readdir(dir)) != null)
closedir(dir);
#endif
return true;
}void
copydir::do_copy(const std::vector&filenamelist)
std::ofstream out;
out.open(nowdesfilepath);
if(!out)
out << in.rdbuf();
out.close();
in.close();
}}
測試:
main.cpp檔案
#include #include "copy_dir.h"
using namespace std;
int main(int argc, char *argv)
C 複製資料夾
昨天打算利用獲取的資料夾下所有檔案列表,然後在目標位置新建這個目錄,後來發現很麻煩,實現起來有太多的無用的東西。在網上找了下高手的文章,無恥的用了人家的方法.但總的說還是遞迴的用法,只不過我沒想到用directoryinfo這個類,一直在對著directory想,directory主要是靜態方法,沒...
檔案 資料夾複製
通道對通道複製效率高 param f1 原始檔 param f2 目的檔案 return throws exception public static long forchannel file f1,file f2 throws exception if inc.size inc.position ...
C 複製資料夾及子資料夾的檔案
通用的檔案操作功能 複製資料夾及子資料夾的檔案 複製源資料夾及其子資料夾中的檔案 public void copyfile string sourcepath,string objpath string files directory getfiles sourcepath for int i 0 ...