文件操作工具,需者自取

来源:http://www.cnblogs.com/preacher/archive/2016/11/21/6086159.html
-Advertisement-
Play Games

先來展示下做到了什麼? 首先要導入一個文件夾下的所有文件,要不你怎麼操作呢?或者,如果本地有xml文檔,可以載入xml文檔內容。 圖片上的描述已經夠看了,我就不費事在這裡多寫些什麼了。 我又仔細的看了一下,貌似也不需要語言上解釋什麼了,唉,那就這樣吧。 昨天花了三四個小時做的,今天又簡單的修改了一下 ...


先來展示下做到了什麼?

 

首先要導入一個文件夾下的所有文件,要不你怎麼操作呢?或者,如果本地有xml文檔,可以載入xml文檔內容。

圖片上的描述已經夠看了,我就不費事在這裡多寫些什麼了。

 

 

我又仔細的看了一下,貌似也不需要語言上解釋什麼了,唉,那就這樣吧。

 

 

================================================================================================

 

昨天花了三四個小時做的,今天又簡單的修改了一下,希望會有人喜歡。

 

XMLHelper 和 TextHelper 幾乎可以說是萬能通用工具。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Xml;
 6 
 7 namespace 文章操作工具
 8 {
 9     public class XMLHelper
10     {
11         public static void SerializeToXml<T>(string filePath, T obj)
12         {
13             using (System.IO.StreamWriter writer = new System.IO.StreamWriter(filePath))
14             {
15                 System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
16                 xs.Serialize(writer, obj);
17             }
18         }
19 
20         public static T DeserializeFromXml<T>(string filePath)
21         {
22             if (!System.IO.File.Exists(filePath))
23                 throw new ArgumentNullException(filePath + " not Exists");
24 
25             using (System.IO.StreamReader reader = new System.IO.StreamReader(filePath))
26             {
27                 System.Xml.Serialization.XmlSerializer xs = new System.Xml.Serialization.XmlSerializer(typeof(T));
28                 return (T)xs.Deserialize(reader);
29             }
30 
31         }
32     }
33 }
XMLHelper

 

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.Linq;
  4 using System.Text;
  5 using System.IO;
  6 
  7 namespace 文章操作工具
  8 {
  9     public class TextHelper
 10     {
 11         public static System.Text.Encoding GetType(string filename)
 12         {
 13             FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read);
 14             System.Text.Encoding r = GetType(fs);
 15             fs.Close();
 16             return r;
 17         }
 18         
 19         public static System.Text.Encoding GetType(FileStream fs)
 20         {
 21             /*
 22                                 Unicode    
 23                                 ------------------
 24                                 255    254
 25 
 26                                 ======================
 27                                 UnicodeBigEndian
 28                                 -------------------
 29                                 254    255
 30 
 31                                 ======================
 32                                 UTF8
 33                                 -------------------
 34                                 34 228
 35                                 34 229
 36                                 34 230
 37                                 34 231
 38                                 34 232
 39                                 34 233
 40                                 239    187
 41              
 42                                 ======================
 43                                 ANSI
 44                                 -------------------
 45                                 34 176
 46                                 34 177
 47                                 34 179
 48                                 34 180
 49                                 34 182
 50                                 34 185
 51                                 34 191
 52                                 34 194
 53                                 34 196
 54                                 34 198
 55                                 34 201
 56                                 34 202
 57                                 34 205
 58                                 34 206
 59                                 34 208
 60                                 34 209
 61                                 34 210
 62                                 34 211
 63                                 34 213
 64                                 196 167
 65                                 202 213
 66                                 206 228
 67             */
 68             BinaryReader r = new BinaryReader(fs, System.Text.Encoding.Default);
 69             byte[] ss = r.ReadBytes(3);
 70             int lef = ss[0];
 71             int mid = ss[1];
 72             int rig = ss[2];
 73             r.Close();
 74             /*  文件頭兩個位元組是255 254,為Unicode編碼;
 75                 文件頭三個位元組  254 255 0,為UTF-16BE編碼;
 76                 文件頭三個位元組  239 187 191,為UTF-8編碼;*/
 77             if (lef == 255 && mid == 254)
 78             {
 79                 return Encoding.Unicode;
 80             }
 81             else if (lef == 254 && mid == 255 && rig == 0)
 82             {
 83                 return Encoding.BigEndianUnicode;
 84             }
 85             else if (lef == 254 && mid == 255)
 86             {
 87                 return Encoding.BigEndianUnicode;
 88             }
 89             else if (lef == 239 && mid == 187 && rig == 191)
 90             {
 91                 return Encoding.UTF8;
 92             }
 93             else if (lef == 239 && mid == 187)
 94             {
 95                 return Encoding.UTF8;
 96             }
 97             else if (lef == 196 && mid == 167
 98                 || lef == 206 && mid == 228
 99                 || lef == 202 && mid == 213)
100             {
101                 return Encoding.Default;
102             }
103             else
104             {
105                 if (lef == 34)
106                 {
107                     if (mid < 220) return Encoding.Default;
108                     else return Encoding.UTF8;
109                 }
110                 else
111                 {
112                     if (lef < 220) return Encoding.Default;
113                     else return Encoding.UTF8;
114                 }
115             }
116         }
117     }
118 }
TextHelper

 

 

================================================================================================  

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Text;
 5 using System.Threading.Tasks;
 6 using System.Xml.Serialization;
 7 
 8 namespace 文章操作工具
 9 {
10     public class BookInfo
11     {
12         [XmlAttributeAttribute]
13         public long length { set; get; }
14 
15         [XmlAttributeAttribute]
16         public string bookname { set; get; }
17 
18         //[XmlAttributeAttribute]
19         //public string author { set; get; }
20 
21         [XmlAttributeAttribute]
22         public string path { set; get; }
23 
24         [XmlAttributeAttribute]
25         public string type { set; get; }
26         public string fullname { get { return path + "/" + bookname; } }
27     }
28 }
BookInfo

 

 

================================================================================================

 

  1 using System;
  2 using System.Collections.Generic;
  3 using System.ComponentModel;
  4 using System.Data;
  5 using System.Drawing;
  6 using System.IO;
  7 using System.Linq;
  8 using System.Text;
  9 using System.Text.RegularExpressions;
 10 using System.Threading.Tasks;
 11 using System.Windows.Forms;
 12 
 13 namespace 文章操作工具
 14 {
 15     public partial class frmMain : Form
 16     {
 17         private List<BookInfo> booklist = new List<BookInfo>(1000);
 18         private List<BookInfo> bindlist = new List<BookInfo>(1000);
 19         private readonly string xmlName = "BookInfo.XML";
 20         public frmMain()
 21         {
 22             InitializeComponent();
 23 
 24             this.dataGridView1.AutoGenerateColumns = false;
 25             this.bookname.DataPropertyName = "bookname";
 26             this.path.DataPropertyName = "path";
 27             this.length.DataPropertyName = "length";
 28             this.author.DataPropertyName = "author";
 29             this.type.DataPropertyName = "type";
 30 
 31             this.txtPageSize.Text = this.pagesize.ToString();
 32         }
 33 
 34         private void btn_Input_Info_Click(object sender, EventArgs e)
 35         {
 36             ConsoleWriteLine("導入信息 : " + tex_Path.Text + Environment.NewLine, Color.Green);
 37             if (Directory.Exists(tex_Path.Text))
 38             {
 39                 AllButtonEnable(this, false);
 40                 BackgroundWorker b = new BackgroundWorker();
 41                 b.DoWork += (s, ea) =>
 42                 {
 43                     Cycle(tex_Path.Text);
 44                 };
 45                 b.RunWorkerCompleted += (s, ea) =>
 46                 {
 47                     AllButtonEnable(this, true);
 48                 };
 49                 b.RunWorkerAsync();
 50             }
 51         }
 52 
 53         private void AllButtonEnable(Control pctl, bool enable) {
 54 
 55             tex_Path.Enabled = enable;
 56             AllButtonEnable2(pctl, enable);
 57         }
 58 
 59         private void AllButtonEnable2(Control pctl, bool enable)
 60         {
 61             if (pctl is ButtonBase)
 62             {
 63                 pctl.Enabled = enable;
 64             }
 65             else
 66             {
 67                 foreach (Control ctl in pctl.Controls)
 68                 {
 69                     AllButtonEnable2(ctl, enable);
 70                 }
 71             }
 72         }
 73 
 74         private void tex_Path_Click(object sender, EventArgs e)
 75         {
 76             FolderBrowserDialog g = new FolderBrowserDialog();
 77             g.SelectedPath = Directory.GetDirectoryRoot(AppDomain.CurrentDomain.BaseDirectory);
 78             g.ShowNewFolderButton = false;
 79             if (g.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 80             {
 81                 if (g.SelectedPath != null && Directory.Exists(g.SelectedPath))
 82                 {
 83                     tex_Path.Text = g.SelectedPath;
 84                 }
 85             }
 86         }
 87 
 88         private bool Cycle(string path)
 89         {
 90             int fileCount = 0;
 91             int folderCount = 0;
 92 
 93             if (path == null || path == "")
 94             {
 95                 return false;
 96             }
 97 
 98             string[] files = null;
 99             try
100             {
101                 files = Directory.GetFiles(path);
102             }
103             catch (Exception ex)
104             {
105                 ConsoleWriteLine("Directory.GetFiles(" + path + ") Exception : " + ex.StackTrace + Environment.NewLine, Color.Red);
106             }
107 
108             if (files != null && (fileCount = files.Length) > 0)
109             {
110                 foreach (string file in files)
111                 {
112                     try
113                     {
114                         FileInfo fi = new FileInfo(file);
115                         if (fi.Length == 0)
116                         {
117                             ConsoleWriteLine("delete 0 size file : " + fi.FullName + Environment.NewLine);
118                             fi.Attributes = fi.Attributes & ~(FileAttributes.Archive | FileAttributes.ReadOnly | FileAttributes.Hidden);
119                             fi.Delete();
120                             fileCount--;
121                         }
122                         else
123                         {
124                             BookInfo info = new BookInfo
125                             {
126                                 bookname = fi.Name,
127                                 path = fi.DirectoryName,
128                                 length = fi.Length,
129                                 type = fi.Extension
130                             };
131                             this.booklist.Add(info);
132                         }
133                     }
134                     catch (Exception ex)
135                     {
136                         ConsoleWriteLine("FileInfo.Delete(" + file + ") Exception : " + ex.StackTrace + Environment.NewLine, Color.Red);
137                     }
138                 }
139             }
140 
141             string[] folders = null;
142             try
143             {
144                 folders = Directory.GetDirectories(path);
145             }
146             catch (Exception ex)
147             {
148                 ConsoleWriteLine("Directory.GetDirectories(" + path + ") Exception : " + ex.StackTrace + Environment.NewLine, Color.Red);
149             }
150 
151             if (folders != null && (folderCount = folders.Length) > 0)
152             {
153                 foreach (string folder in folders)
154                 {
155                     if (Cycle(folder))
156                     {
157                         try
158                         {
159                             DirectoryInfo di = new DirectoryInfo(folder);
160                             ConsoleWriteLine("delete Empty path " + di.FullName + Environment.NewLine);
161                             di.Attributes = di.Attributes & ~(FileAttributes.Archive | FileAttributes.ReadOnly | FileAttributes.Hidden);
162                             di.Delete();
163                             folderCount--;
164                         }
165                         catch (Exception ex)
166                         {
167                             ConsoleWriteLine("DirectoryInfo.Delete(" + path + ") Exception : " + ex.StackTrace + Environment.NewLine, Color.Red);
168                         }
169                     }
170                 }
171             }
172 
173             //ConsoleWriteLine("搜索 " + path + " 完畢" + Environment.NewLine);
174             return (folderCount <= 0 && fileCount <= 0);
175         }
176 
177         private void ConsoleWriteLine(string msg)
178         {
179             if (!rtx_show.InvokeRequired)
180             {
181                 rtx_show.AppendText(msg);
182                 rtx_show.ScrollToCaret();
183             }
184             else
185             {
186                 rtx_show.Invoke(new MethodInvoker(delegate { ConsoleWriteLine(msg); }));
187             }
188         }
189 
190         private void ConsoleWriteLine(string msg, Color cc)
191         {
192             if (!rtx_show.InvokeRequired)
193             {
194                 var v = rtx_show.ForeColor;
195                 rtx_show.ForeColor = cc;
196                 rtx_show.AppendText(msg);
197                 rtx_show.ForeColor = v;
198                 rtx_show.ScrollToCaret();
199             }
200             else
201             {
202                 rtx_show.Invoke(new MethodInvoker(delegate { ConsoleWriteLine(msg, cc); }));
203             }
204         }
205 
206         private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
207         {
208             DataGridView dgv = (DataGridView)sender;
209 
210             if (dgv.Columns[e.ColumnIndex].Name == "delete")
211             {
212                 try
213                 {
214                     if (MessageBox.Show("確認要刪除嗎?", "警告", MessageBoxButtons.OKCancel) == System.Windows.Forms.DialogResult.OK)
215                     {
216                         BookInfo info = (BookInfo)dgv.Rows[e.RowIndex].DataBoundItem;
217                         string fullname = info.fullname;
218                         this.booklist.Remove(info);
219                         this.bindlist.Remove(info);
220                         bindData();
221                         FileInfo fi = new FileInfo(fullname);
222                         fi.Attributes = fi.Attributes & ~(FileAttributes.Archive | FileAttributes.ReadOnly | FileAttributes.Hidden);
223                         fi.Delete();
224                         ConsoleWriteLine("delete file : " + fullname + Environment.NewLine, Color.Green);
225                     }
226                 }
227                 catch (Exception ex)
228                 {
229                     ConsoleWriteLine("FileInfo.Delete(" + bookname + ") Exception : " + ex.StackTrace + Environment.NewLine, Color.Red);
230                 }
231             }
232 
233             if (dgv.Columns[e.ColumnIndex].Name == "load")
234             {
235                 try
236                 {
237                     BookInfo info = (BookInfo)dgv.Rows[e.RowIndex].DataBoundItem;
238                     string fullname = info.fullname;
239                     if (isLeft)
240                     {
241                         textBox1.Text = File.ReadAllText(fullname, TextHelper.GetType(fullname));
242                     }
243                     else
244                     {
245                         textBox2.Text = File.ReadAllText(fullname, TextHelper.GetType(fullname));
246                     }
247                     isLeft = !isLeft;
248                     ConsoleWriteLine("load file : " + fullname + Environment.NewLine, Color.Green);
249                 }
250                 catch (Exception ex)
251                 {
252                     ConsoleWriteLine("FileInfo.Delete(" + bookname + ") Exception : " + ex.StackTrace + Environment.NewLine, Color.Red);
253                 }
254             }
255         }
256 
257         private bool isLeft = true;
258 
259         private void btnSearch_Click(object sender, EventArgs e)
260         {
261             AllButtonEnable(this, false);
262             string bookname = txtName.Text;
263             ConsoleWriteLine("search file : " + bookname + Environment.NewLine, Color.Green);
264             try
265             {
266                 if (!string.IsNullOrEmpty(bookname))
267                 {
268                     this.bindlist = this.booklist.FindAll((i) => { return i.bookname.Contains(bookname); });
269                 }
270                 else
271                 {
272                     this.bindlist = this.booklist;
273                 }
274 
275                 this.curpage = 1
              
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 怎樣使用 async & await 一步步將同步代碼轉換為非同步編程 【博主】反骨仔 【出處】http://www.cnblogs.com/liqingwen/p/6079707.html 序 上次,博主通過《利用 async & await 的非同步編程》該篇點睛之作介紹了 async & awai ...
  • 中間件的註冊除了可以藉助Startup對象(DelegateStartup或者ConventionBasedStartup)來完成之外,也可以利用另一個叫做StartupFilter的對象來實現。所謂的StartupFilter是對所有實現了IStartupFilter介面的類型及其對象的統稱。 ...
  • 以現在物聯網的現狀或是對物聯網的認知,特別是工業物聯網,必須具備集成多種數據源的能力。數據源大體分兩類:硬體產生和軟體產生。 基於現實情況,作為物聯網框架必須具備各類數據的集成能力,以及各種應用場景。以數據大小為例,小到一次接收緩存承載能力範圍內的數據,大到超出一次接收緩存承載能力範圍的數據... ...
  • static void Main(string[] args) { //類型 //結構:值類型 //類:引用類型 //聲明的語法:class struct //在類中,構造函數里,既可以給欄位賦值,也可以給屬性賦值。構造函數是可以重載的 //但是,在結構的構造函數當中,必須只能給欄位賦值。 //在結 ...
  • 介面是一種規範。只要一個類繼承了一個介面,這個類就必須實現這個介面中所有的成員 為了多態。 介面不能被實例化。也就是說,介面不能new(不能創建對象) 介面中的成員不能加“訪問修飾符”,介面中的成員訪問修飾符為public,不能修改。 (預設為public) 介面中的成員不能有任何實現(“光說不做” ...
  • 我們工作到底為了什麼(這篇文章很重要) HP大中華區總裁孫振耀退休感言 : 如果這篇文章沒有分享給你,那是我的錯。 如果這篇文章分享給你了,你卻沒有讀,繼續走彎路的你不要怪我。 如果你看了這篇文章,只讀了一半你就說沒時間了,說明你已經是個“茫”人了。 如果你看完了,你覺得這篇文章只是講講大道理,說明 ...
  • 1、兩個練習題 1)編程實現46天,是幾周幾天 int days = 46; int weeks = days / 7; int day =days % 7; //Console.WriteLine(weeks); //Console.WriteLine(day); Console.WriteLin ...
  • 參數可以設置, codeproject上寫的。網址在這裡。 源碼里有demo,很詳細。 源碼在這裡。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...