c 中的rdbuf 函式已經自適應了緩衝區

2021-10-10 16:43:58 字數 1806 閱讀 1455

最近寫乙個拷貝檔案的小工具,平時總使用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...