發表文章

目前顯示的是 2015的文章

C# 取得程式路徑

因為工作的關係需要開始使用C#,所以就從這邊開始紀錄一些C#的使用方式吧。 (發現年紀越大,學的東西如果不筆記起來就很容易忘了啊啊啊冏) A.取得和設置當前目錄(即該程序從中啟動的目錄)的完整路徑,這個設定會受到 Startup Directory(環境變數:起始目錄)的影響,通常像是排程或是DEBUG都會有這種設定。 string dir = System.Environment.CurrentDirectory; 結果: C:\Project\MyApplication1 B.取得啟動應用程序的執行檔案的路徑,不包括可執行檔案的名稱,通常也是程式真實位置,不受到 Startup Directory(環境變數:起始目錄)的影響。 string dir = System.Windows.Forms.Application.StartupPath; 結果: C:\Project\MyApplication1 C.取得應用程序的當前工作目錄,這個設定會受到 Startup Directory(環境變數:起始目錄)的影響,通常像是排程或是DEBUG都會有這種設定。 string dir = System.IO.Directory.GetCurrentDirectory(); 結果: C:\Project\MyApplication1 D.取得當前 Thread 的當前應用程式所在的根目錄(尾部帶有\),通常也是程式真實位置,不受到 Startup Directory(環境變數:起始目錄)的影響。 string dir = System.AppDomain.CurrentDomain.BaseDirectory; 結果: C:\Project\MyApplication1\ E.取得和設置包含該程式的目錄的名稱(尾部帶有\)。 string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase; 結果: C:\Project\MyApplication1\ F.取得啟動應用程式的可執行檔案的路徑,包括可執行檔案的名稱。 string dir = System.Windows

CFLOCK多人共用資源鎖定/獨占

WEB是個多人共用的執行環境。 好處是多人多工執行緒,不會互相干擾。 缺點是同時搶資源時處理上就很傷腦筋。 什麼叫『搶資源』,白話說搶票啦,簡單說就是希望讓多人執行可以排隊做"某件事"。 假如資料庫裡面有一個表Tickets,裡面裡面有500筆資料,每一筆都是獨立票號。 當客人要來取票時,系統會找出Tickets裡面沒有被使用的票號發給客人。 所以程式碼會寫成: <cfquery name="check1" datasource="SQLDB">  Select top 1 tick_no  From Tickets  Where tick_used = 'N' </cfquery> <cfif check1.recordcount GT 0>  <cfset newTicket = check1.tick_no>   <cfquery name="update1" datasource="SQLDB">   Update Tickets   Set tick_used = 'Y' , cust_id = '#LoginCust#'   Where Tick_no = '#newTicket#'  </cfquery> </cfif> <cftransaction action="commit" /> <cfif isdefined("newTicket")>  <cfoutput>You Got Tick No : #newTicket#</cfoutput> <cfelse>  <cfoutput>No More Tickets can get !</cfoutput> </cfif> 邏輯上看似沒有問題,但是請別忘記WEB是多人操作的, 結果就發生同時有2個人很湊巧的同一秒鐘按下取票, 因此上面程式碼就被兩個執行緒同時