最近寫乙個拷貝檔案的小工具,平時總使用rdbuf()函式,也沒出啥問題,最近突然考慮到要是拷貝大檔案記憶體不夠,豈不是會崩潰。
然而,實際上並不會!
//author:autumoon
//日期:2020-11-20
bool cstdfile::copyafile(const _tstring& stsrcfilename, const _tstring& stdstfilename, const bool& bfailifexists)
//如果目標目錄不存在,則建立目錄
_tstring strdir = cstdstr::getdiroffile(stdstfilename);
if (!cstddir::createdir(strdir))
std::ifstream in;
std::ofstream out;
in.open(stsrcfilename, std::ios::binary);//開啟原始檔
if (in.fail())//開啟原始檔失敗
if (bfailifexists && ifaccessfile(stdstfilename))
out.open(stdstfilename, std::ios::binary);//建立目標檔案
if (out.fail())//建立檔案失敗
//複製檔案
out << in.rdbuf();
out.close();
in.close();
return true;
}
然後我自己換了個思路下,不使用rdbuf()函式。
//author:autumoon
//日期:2020-11-20
bool cstdfile::copfilewithprocess(const _tstring& stsrcfilename, const _tstring& stdstfilename, const bool& bfailifexists)
//如果目標目錄不存在,則建立目錄
_tstring strdir = cstdstr::getdiroffile(stdstfilename);
if (!cstddir::createdir(strdir))
std::ifstream in;
std::ofstream out;
in.open(stsrcfilename, std::ios::binary);//開啟原始檔
if (in.fail())//開啟原始檔失敗
if (bfailifexists && ifaccessfile(stdstfilename))
out.open(stdstfilename, std::ios::binary);//建立目標檔案
if (out.fail())//建立檔案失敗
//快取大小
size_t nbufsize = 10 * 1024 * 1024;
char* buf = new char[nbufsize]();
long long totalbytes = 0;
while(in)
delete buf;
buf = nullptr;
in.close();
out.close();
return true;
}
結果發現下面的速度沒有上面的快!即使我把快取更改到100mb,仍然如此!
在網上了解到這就是c++中的流緩衝的威力了,程式通過把原始檔的流重定向到關聯到目的檔案的流物件,通過 fout《特此紀念,歡迎交流!
網格自適應 Abaqus中的ALE自適應網格技術
ale 自適應網格主要用於 abaqus explicit 的大變形分析,以及 abaqus standard 中的聲疇 acoustic domain 沖蝕 ablation 和磨損問題。在 abaqus standard 的大變形分析中,儘管也可以設定 ale 自適應網格,但不會起到明顯的作用。...
自適應濾波中的期望訊號
去相關可能是乙個非常直觀的角度。假定輸入的是乙個被白雜訊汙染的訊號x n s n v n 其中s n 代表訊號,v n 代表雜訊。期望訊號是d n y n 表示x n 通過維納濾波器之後的輸出。按照維納濾波器誤差能量最小的準則,即e y d 2 最小。也就是說y n 與d n 相關性最強的情況下,誤...
Unity中UGUI的螢幕自適應
隨著遊戲裝置的不斷增加,螢幕的解析度也越來越多,所以針對不同的螢幕解析度,unity中也提供了解析度自適應的機制。遊戲中的解析度自適應主要做兩方面的工作 調整畫布元件 調整錨點 調整畫布元件 ugui中canvas scaler元件是調整整體縮放的,有三種模式 constant pixel size...