這裏輸入代碼
算法
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Security.Cryptography; using System.Text; using System.Threading.Tasks; namespace CSharp1 { class MD5 { /// <summary> /// 計算文件的 MD5 值 /// </summary> /// <param name="fileName">要計算 MD5 值的文件名和路徑</param> /// <returns>MD5 值16進制字符串</returns> public static string SHA256File(string fileName) { System.Security.Cryptography.MD5.Create(); return HashFile(fileName, "sha256"); } /// <summary> /// 計算文件的哈希值 /// </summary> /// <param name="fileName">要計算哈希值的文件名和路徑</param> /// <param name="algName">算法:sha1,md5</param> /// <returns>哈希值16進制字符串</returns> public static string HashFile(string fileName, string algName) { if (!System.IO.File.Exists(fileName)) return string.Empty; FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); byte[] hashBytes = HashData(fs, algName); fs.Close(); return ByteArrayToHexString(hashBytes); } /// <summary> /// 計算哈希值 /// </summary> /// <param name="stream">要計算哈希值的 Stream</param> /// <param name="algName">算法:sha1,md5</param> /// <returns>哈希值字節數組</returns> public static byte[] HashData(Stream stream, string algName) { HashAlgorithm algorithm; if (algName == null) { throw new ArgumentNullException("algName 不能爲 null"); } if (string.Compare(algName, "sha1", true) == 0) { algorithm = SHA1.Create(); } else if (string.Compare(algName, "sha256", true) == 0) { algorithm = SHA256.Create(); } else if (string.Compare(algName, "md5", true) == 0) { algorithm = System.Security.Cryptography.MD5.Create(); } else { throw new Exception("algName 只能使用 sha1 , sha256 或 md5"); } return algorithm.ComputeHash(stream); } /// <summary> /// 字節數組轉換爲16進製表示的字符串 /// </summary> public static string ByteArrayToHexString(byte[] buf) { string returnStr = ""; if (buf != null) { for (int i = 0; i < buf.Length; i++) { returnStr += buf[i].ToString("X2"); } } return returnStr; } } }
using System; using System.Collections.Generic; using System.IO; using System.IO.Compression; using System.Text; namespace CSharp1 { class Program { static void Main(string[] args) { string currentDir = Directory.GetCurrentDirectory(); Console.WriteLine("create dir:"+currentDir); string startPath = @"d:\tmp\abc"; string md5Path = @"d:\tmp\1.md5"; string extractPath = @"c:\example\extract"; //DirectoryInfo dir = new DirectoryInfo(startPath); //createHideDir(startPath); List<string> f_list = getAllScriptFiles(); foreach (var f in f_list) { string a = MD5.HashFile(f, "md5"); Console.WriteLine($"File:{f}, md5:{a}" ); Write(md5Path, a); } string fileContent = File.ReadAllText(md5Path); Console.WriteLine("fileContent:" + fileContent+ "Length:"+fileContent.Length); Console.ReadKey(); } public static List<string> getAllScriptFiles() { List<string> file_list = new List<string>(); //遍歷指定目錄下的全部文件 DirectoryInfo dir = new DirectoryInfo(@"d:\tmp\SSH.NET"); foreach (var each in dir.GetFiles()) { Console.WriteLine("File:" + each.FullName); file_list.Add(each.FullName); } return file_list; } public static void Write(string path, string content) { FileStream fs = new FileStream(path, FileMode.Create); StreamWriter sw = new StreamWriter(fs); //開始寫入 sw.Write(content+"\n"); //清空緩衝區 sw.Flush(); //關閉流 sw.Close(); fs.Close(); } public static void createHideDir(string path) { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); Console.WriteLine("create dir success."); } DirectoryInfo dir = new DirectoryInfo(path); dir.Attributes = dir.Attributes | FileAttributes.Hidden; } /// <summary> /// 壓縮目錄 /// </summary> /// <param name="dir"></param> public static void Compress(DirectoryInfo dir) { foreach (FileInfo fileToCompress in dir.GetFiles()) { Compress(fileToCompress); } } /// <summary> /// 解壓縮目錄 /// </summary> /// <param name="dir"></param> public static void Decompress(DirectoryInfo dir) { foreach (FileInfo fileToCompress in dir.GetFiles()) { Decompress(fileToCompress); } } /// <summary> /// 壓縮文件 /// </summary> /// <param name="fileToCompress"></param> public static void Compress(FileInfo fileToCompress) { using (FileStream originalFileStream = fileToCompress.OpenRead()) { if ((File.GetAttributes(fileToCompress.FullName) & FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz") { using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz")) { using (GZipStream compressionStream = new GZipStream(compressedFileStream, CompressionMode.Compress)) { originalFileStream.CopyTo(compressionStream); } } } } } /// <summary> /// 解壓縮文件 /// </summary> /// <param name="fileToDecompress"></param> public static void Decompress(FileInfo fileToDecompress) { using (FileStream originalFileStream = fileToDecompress.OpenRead()) { string currentFileName = fileToDecompress.FullName; string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length); using (FileStream decompressedFileStream = File.Create(newFileName)) { using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress)) { decompressionStream.CopyTo(decompressedFileStream); } } } } } }
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading;數組
namespace CSharp1 { class CheckHost {ssh
Dictionary<string, bool> ssh_info = new Dictionary<string, bool>(); List<Thread> pool = new List<Thread>(); System.Timers.Timer aTimer = new System.Timers.Timer(); public CheckHost() { this.initParams(); this.initPool(); } public void showResult() { int success = 0; int fail = 0; foreach (bool each in ssh_info.Values) { if (each) success++; else fail++; } Console.WriteLine($"SUCCESS: {success}, FAIL:{fail}"); } private void initParams() { this.ssh_info.Add("172.28.0.2", false); this.ssh_info.Add("172.28.0.3", false); this.ssh_info.Add("172.28.0.4", false); aTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimeEvent); aTimer.Interval = 10000; aTimer.Enabled = true; aTimer.Start(); //開始計時 } private void initPool() { Thread t; foreach (var each in ssh_info.Keys) { t = new Thread((new ParameterizedThreadStart(CheckHostFunc))); pool.Add(t); Console.WriteLine("try to start:" + each); t.Start(each); } } //該函數用於監控host的鏈接性 private void CheckHostFunc(object info) { //檢查host是否可用 string key = (string)info; Console.WriteLine(DateTime.Now + "-start to run host: " + key); //設置爲能夠鏈接 Thread.Sleep(2000); ssh_info[key] = true; Thread.Sleep(30000); Console.WriteLine(DateTime.Now + "-END to run host: " + key); } private void OnTimeEvent(object sender, EventArgs e) { Console.WriteLine("enter time action: " + DateTime.Now); foreach (Thread t in this.pool) { if (t != null && t.IsAlive) { Console.WriteLine(t.ToString() + " aborted!"); t.Abort(); } } //釋放計時器 aTimer.Dispose(); Console.WriteLine("leave time action:" + DateTime.Now); } }
}ide