| | | 4 | | 4,270 |
最近寫到內容維護 UI,想留下資料修改軌跡。除了保留修改前修改後的完整內容,我還想出一份簡單的差異報告,指出哪幾行有更改,增加了哪幾行、哪幾行被刪除... 等,方便一眼看出變更重點;甚至不必保留舊版,用最新版加差異報告便能一路反推完整修改歷程,大量節省儲存空間。思考這個需求時,我想到 Git dif...
| | | 0 | | 6,955 |
同事提問,某報表匯出作業執行很耗時,長達數十秒到一分鐘,為避免使用者分不清作業是否在執行中陷入焦慮(或狂點滑鼠猛按 F5,你懂的), 打算在下載匯出檔過程顯示下載中動畫,但要如何在檔案下載完成時精準結束動畫是個問題。 這個需求用 AJAX 不難解決,當下我便提供了建議。不過,身為程式魔人光用嘴寫程式...
| | | 0 | | 7,108 |
收到冷門需求。 公司人資會寄一種很炫的通知信,在收信匣萬黑叢中一點紅,十分顯眼。業務單位看到了,舉手說他們也要,希望某系統的重要通知信也能比照變成紅色主旨並跳出提醒,力求從茫茫信海脫穎而出:(如下圖所示) 紅色主旨之前看過,但從沒去想是怎麼辦到的。研究後發現是個 Outlook 小技巧 - 寄信時...
| | | 2 | | 2,773 |
工作需求,上線前置作業想從 TFS 版控抓出指定期間異動過的檔案清單,懶得尋覓現成軟體或工具,寫幾行程式自幹搞定。 TF.EXE 有個 History 命令可列舉特定期間(/v:Dyyyy-MM-dd~Dyyyy-MM-dd)特定目錄下(/recursive)所有 Changeset,加上 /for...
| | | 7 | | 10,036 |
在工作上有些系統選擇將定期執行作業的邏輯寫在 ASP.NET 網站,再設定 SQL 排程 (SQLAgent) 或 Windows 排程器 (Task Scheduler) 呼叫它。這麼做的好處是邏輯完全集中在網站專案,不致分散於網站及主控台程式兩處(雖共用程式庫已可大幅減少重複,但仍比單一網站複雜...
| | | 2 | | 6,965 |
透過 WebClient.DownloadFile() 或 DownloadData() 下載檔案對 .NET 老鳥而言是雕蟲小技(參考:CODE-使用C#程式從網站下載檔案 ),但此種寫法檔名需自行指定。若下載對象非靜態檔案,伺服器端程式會透過 Content-Disposition Respon...
| | | 1 | | 6,352 |
野人獻曝,分享最近在寫的正式、測試台間的小規模資料搬移法。 情境是正式台跟測試台各有自己的資料庫,想將正式台某幾筆資料匯出,備份保存或是匯入測試台資料庫模擬測試;或是反過來,資料先在測試台輸入驗證無誤後要上線,希望將將輸入好的資料直接匯入正式台,省去在正式台重新登打的工夫。 這類情境用 En...
| | | 1 | | 16,735 |
在 Outlook 寫信時,直接在文字穿插圖片是再自然也不過的事(如下圖),但是用 C# 程式走 SMTP 寄信,夾帶附檔的經驗很多,直接在內文內嵌圖檔倒是沒試過。 很快在 Stackoverflow 查到範例,照方煎藥,就寄出像上面圖文並茂的信件了: using System; us...
| | | 2 | | 15,818 |
.NET 4.5 起加入 ZipArchive、ZipFile 等列類別,自此不用額外安裝第三方程式庫就能製作 ZIP 檔。微軟官方文件則有篇範例文章,操作說明:壓縮與解壓縮檔案 - Microsoft Docs,介紹如何使用 System.IO.Compression 的一系列類別壓縮及解壓縮...
| | | 6 | | 10,345 |
在 .NET 要測量執行時間,Stopwatch 是最簡單直覺的做法,像這樣: Stopwatch sw = new Stopwatch(); sw.Start(); //...執行要測試的動作 sw.Stop(); //將測得秒數輸出到Console、Debug或Log檔 Console....
| | | 5 | | 10,801 |
工作遇到新需求:辦公室自動化服務希望讀取使用者行事曆,整合顯示於個人資訊頁。 EWS Managed API 封裝了複雜又囉嗦的 Exchange Web Service SOAP 細節,改以 .NET 程式庫形式提供電子郵件、連絡人、行事曆、公用資料夾的存取管道,是 C# 開發 Exchan...
| | | 0 | | 11,036 |
從檔案萃取文字部分建立索引是全文檢索的必要程序,先前介紹過為 PDF、Office 檔案產生文字索引的做法,實際開發則遇到為 JSON 建立文字索引的需求。借用上回遞迴文章的組織資料當實例,假設 JSON 格式如下: { "Name": "總經理", "Children": [ ...
| | | 7 | | 19,482 |
資料庫查詢結果要做分頁,我較常用的做法是拉到 C# 端將物件陣列或 List<T> 存入 MemoryCache,用 .Length 可以取總筆數,用 Skip(pageSize * (pageNo - 1)).Take(pageSize) 取回指定頁數資料,換頁或排序時...
| | | 5 | | 23,156 |
專案遇到批次列印 PDF 檔需求。 Acrobat Reader 或 Foxit Reader 等常用 PDF 軟體本身就具備傳參數直接列印功能,例如 Acrobat Reader 直接列印 PDF 之語法為:AcroRd32.exe /p /h "pdf路徑" "...
| | | 7 | | 45,915 |
參與古老系統的搬遷工程,其中使用 Shared Memory 實現跨 Process 溝通(例如:ASP.NET 呼叫 Window Service),也因而被迫了解這門對 .NET 開發者偏冷門的技術,特筆記備忘。 【Shared Memory 是什麼?】 跨 Process 溝通有個術語...
| | | 0 | | 8,914 |
專案遇上數字轉成英文的需求,例如:1234 需轉為 one thousand two hundred thirty four。 網路上有許多解決方案,程式範例、現成函式庫都有,選擇眾多之下,透過 NuGet 即裝即用才是王道。我找到一個,在 NuGet 搜尋 NUT,第一筆 Nut, Numb...