Time of Update: 2018-12-08
用boost::format來格式化字串在字串處理中少不了格式化字串,C++中傳統的格式化函數是C語言的sprintf,但它一個很大的問題就是不安全。因此,在stl中引入了stringstream來實現安全格式化,但是stringstream卻遠不如sprintf來得直觀。例如,對如如下代碼: char text[]="hello"; bool is_all_lower = boost::algorithm::all(text, is_lower()); char
Time of Update: 2018-12-08
InstallShield預設的Release模式下,產生了一個setup.exe檔案,一個msi檔案,以及一些其它的雜項檔案。 這種方式的好處是不用解壓,點擊setup.exe就可以直接開始安裝,非常適合以前的那種傳統的光碟片發布安裝包的形式。 但是如今大都不發布光碟片了,而是直接發布一個連結地址,使用者直接通過這個連結地址下載到安裝檔案後安裝。這時這種多檔案的方式就不方便發布了,如果把它打包成zip格式的話還需要一個解壓的步驟,是非常好不友好的。我們通常的方式是將所有檔案它合并成
Time of Update: 2018-12-08
c++在stl庫中提供了一個string類用以代替c語言的char*來實現字串功能,不過stl的string只提供了一個連接字串和尋找的功能,其它的常用函數幾乎一律沒有,就連字號串替換都得自己來實現,和c#的字串函數比起來簡直弱爆了。boost庫在標頭檔<boost/algorithm/string.hpp>中提供了不少字串處理函數,用以協助我們實現基本的字串處理功能,極大程度上緩解了字串函數不夠用的問題。 string str1("hello abc-*-ABC-*-aBc
Time of Update: 2018-12-08
最近給自己寫了個類似迅雷的多線程下載程式(我用的是非同步socket,嚴格來說並不是多線程的方式,應該算多任務),總結了下相關需求,主要如下:下載功能(Core) 支援指定URL下載檔案 支援實現自訂Refer、Cookie等Header 支援查詢下載速度、檔案大小 支援檔案快取功能。 下載完成後校正已經下載的檔案大小是否等於遠端檔案大小(防止伺服器端主動中斷串連) 下載到同名檔案智能重新命名 支援失敗重試 支援下載速度較慢時主動中斷並重試
Time of Update: 2018-12-08
前段時間在文章《log4net使用簡介》中介紹了一下如何通過log4net記錄日誌,今天在這裡推薦一個配套的log查看工具log2console,這個是一個非常好用的開源log查看器。這個log查看器非常有用,通過它可以查看程式中產生的日誌。另外,它的即時日誌功能非常方便,我們在記錄檔中往往並不記錄Trace層級的資訊(資訊較多,會覆蓋或影響正常日誌的查看),但是通過log2console就可以即時查看,對於程式的流程分析是非常有用的。我現在經常用它配合log4net代替Debug.WriteL
Time of Update: 2018-12-08
很多時候,我們需要在記憶體中記錄最近一段時間的資料,如操作記錄等。由於這部分資料記錄在記憶體中,因此並不能無限遞增,一般有容量限制,超過後就將最開始的資料移除掉。在stl中並沒有這樣的資料結構,一般需要我們自己構造,常用方法如下:用list構造,超過後把資料頭移除用vector構造,超過後把資料頭移除用數組構造,通過迴圈的方式覆蓋這幾種方式都有各自的缺點:用list構造無法實現隨機訪問,用vector構造移動資料頭開銷較大,用數組構造需要維護資料頭指標和防止計數器溢出,計算位置和資料的移除也相對
Time of Update: 2018-12-08
管理工作在C++ 11的thread庫引入了std::async函數,通過它可以非常容易的實作類別似於.net中的Task方式的並發。 void printf_thread_id(constchar* name) { cout << name << " Thread id: " << this_thread::get_id() << endl; } int
Time of Update: 2018-12-08
當我們開發軟體時,一般都會加入運行期的跟蹤手段,以方便後續故障分析和Bug調試。.net
Time of Update: 2018-12-08
使用boost.signalboost.signal提供了一個多播委託機制,通過它可以非常容易的實現觀察者模式: void print_sum(float x, float y) { std::cout << "The sum is " << x+y << std::endl; } void print_product(floatx, floaty) { std::cout << "The
Time of Update: 2018-12-08
今天在個WCF程式中加入了修改設定檔的功能。我是直接通過IO操作修改的app.config檔案內容,修改後發現發現其並不生效,用Google搜了一下,在園子裡的文章動態修改App.Config 和web.Config中找到瞭解決方案。原來,.net
Time of Update: 2018-12-08
STL線程庫的前身是boost::thread,在C++ 11標準化後便正式歸納入了stl庫,通過它我們可以很容易實現跨平台的線程管理。線程管理在std::thread庫中,一個線程用的是一個thread對象表示,當建立一個thread對象時即建立一個線程,一個簡單的樣本如下: #include<iostream> #include<thread> usingnamespace std; void thread_entry(constchar*
Time of Update: 2018-12-08
對於用戶端來說,遠程調用出現異常需要手動捕獲,否則將導致程式異常終止。對於伺服器端來說,客戶調用是出現的異常會往上拋,但是會被WCF架構給捕獲,不會導致伺服器崩潰,可以不手動捕獲。例如,如下服務函數被調用時並不會導致伺服器崩潰: public class Service1 : IService1 { publicvoid ErrorTest() { thrownewInvalidOperationException("異常測試");
Time of Update: 2018-12-08
在.Net 4.0之前,一直是依靠HttpWebRequest實現Http操作的。它預設有一個非常保守的同一網站下最大2並發數限制,導致預設情況下HttpWebRequest往往得不到理想的速度(估計這個策略鬱悶了不少碼農),必須修改App.config或ServicePointManager.DefaultConnectionLimit的值。MS在.Net
Time of Update: 2018-12-08
我們一般對資料主要有增刪查以及更新這幾中基本操作形式,本文就以前面的文章中的代碼為例,簡單的介紹一下在Entity Framework中基本操作的使用方法。查詢1. 通過linq語句查詢 var query = from b in db.Blogs where b.BlogId == 1 && b.Name == "my blog" select b; var blog =
Time of Update: 2018-12-08
這兩天看了下如何擷取天氣預報,寫篇文章總結下:Weather.com有如下三個Json格式的查詢介面,以北京為例:http://www.weather.com.cn/data/sk/101010100.htmlhttp://www.weather.com.cn/data/cityinfo/101010100.htmlhttp://m.weather.com.cn/data/101010100.html直接存取它就可以擷取到Json格式的資料,解析後就可以用了。其中第三個m.weather.com
Time of Update: 2018-12-08
這兩天在GooglePlay上更新了下軟體,但在中國特色的互連網服務的環境下,一個幾百k的小程式下了十分鐘後硬是下不下來。無奈之餘,我試著DNS改了下,改成了Google的8.8.8.8後,發現速度有明顯好轉,起碼能看到進度條在動了,看來網通的DNS確實是把我們往溝裡帶。由於Google的DNS有時會把我們引出國,影響我們其它訪問的網速。然後便在網上搜了下,找到了一個國內提供的DNS服務114DNS。114.114.114.114 114.114.115.115
Time of Update: 2018-12-08
CodeFirst是EntityFramework 4.1後新增的一種映射方式,在這種方式下,開發人員只需要編寫代碼,由ORM架構自動動建立模型和資料庫,資料庫則可看作類似於XML一樣序列化的方式,非常簡潔(由於開發人員可以無需關心資料庫的具體結構,最初也有叫做CodeOnly的)。下面就以一個簡單的例子示範一下如何使用CodeFirst。一、用Nuget添加EntityFramework架構的引用。 二、編寫代碼 static void Main(string[] args) {
Time of Update: 2018-12-08
在STL庫中,我們可以通過stringstream來實現字串和數字間的轉換: int i = 0; stringstream ss; ss << "123"; ss >> i;但stringstream是沒有錯誤檢查的功能,例如對如如下代碼,會將i給賦值為12. ss << "12.3"; ss >> i;甚至連這樣的代碼都能正常運行: ss << "hello world"; ss
Time of Update: 2018-12-08
stl中對檔案讀寫的函數在標頭檔fstream中定義,它的基本物件模型如下:其中包含三個對象ifstrea、ofstream和fstream,分別對檔案提供唯讀、唯寫、讀寫功能,從其對象繼承關係也可以看出這一點。下面就簡單的介紹下基本的檔案方法開啟檔案 開啟檔案一般有兩種方式:1、在建構函式中開啟 ifstream input("r:\\3.txt", ios::in | ios::binary); 2、通過open函數開啟 ofstream output; output.
Time of Update: 2018-12-08
標準C函數的時間運算是非常不好用的,boost提供了一個跨平台的日期庫boost.date_time,通過它可以快速實現各種時間運算。boost.date_time中的時間對象為boost::posix_time::ptime,在<boost/date_time.hpp>中定義,它的常用操作如下。擷取現在時間: ptime now = second_clock::local_time(); cout << now << endl; 擷取日期資訊: