国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C#強力粉碎文件代碼分享,升級中用到

2019-11-17 02:20:00
字體:
來源:轉載
供稿:網友

C#強力粉碎文件代碼分享,升級中用到

360的文件粉碎機還是很強大的,在我們客戶端winform升級的時候,必須將有些文件進行強力刪除后下載更新,如果刪除失敗很有可能整個 程序就無法更新到最新的版本,所以這里參考了網上的資料整理了一個文件粉碎的小demo,總結了一個類出來,方便以后升級或者其他開發工作的調用

程序運行界面截圖

操作gif動畫圖片

整理的實際類,為了以后使用,提高工作效率

//-------------------------------------------------------------------------------------// All Rights Reserved , Copyright (C) 2015 , ZTO , Ltd .//-------------------------------------------------------------------------------------using System;using System.Diagnostics;using System.IO;using System.Text.RegularExPRessions;namespace ZTO.WayBill.Utilities{    /// <summary>    /// 文件幫助類    ///    /// 修改紀錄    ///    ///          2015-6-5  版本:1.0 YangHengLian 創建主鍵,注意命名空間的排序。    ///     /// 版本:1.0    ///    /// <author>    ///        <name>YangHengLian</name>    ///        <date>2015-6-5</date>    /// </author>    /// </summary>    public class FileHelper    {        /// <summary>        /// 強力粉碎文件,文件如果被打開,很難粉碎        /// </summary>        /// <param name="filename">文件全路徑</param>        /// <param name="deleteCount">刪除次數</param>        /// <param name="randomData">隨機數據填充文件,默認true</param>        /// <param name="blanks">空白填充文件,默認false</param>        /// <returns>true:粉碎成功,false:粉碎失敗</returns>        public static bool KillFile(string filename, int deleteCount, bool randomData = true, bool blanks = false)        {            const int bufferLength = 1024000;            bool ret = true;            try            {                using (FileStream stream = new FileStream(filename, FileMode.Open, Fileaccess.ReadWrite, FileShare.ReadWrite))                {                    FileInfo f = new FileInfo(filename);                    long count = f.Length;                    long offset = 0;                    var rowDataBuffer = new byte[bufferLength];                    while (count >= 0)                    {                        int iNumOfDataRead = stream.Read(rowDataBuffer, 0, bufferLength);                        if (iNumOfDataRead == 0)                        {                            break;                        }                        if (randomData)                        {                            Random randombyte = new Random();                            randombyte.NextBytes(rowDataBuffer);                        }                        else if (blanks)                        {                            for (int i = 0; i < iNumOfDataRead; i++)                                rowDataBuffer[i] = 0;                        }                        else                        {                            for (int i = 0; i < iNumOfDataRead; i++)                                rowDataBuffer[i] = Convert.ToByte(Convert.ToChar(deleteCount));                        }                        // 寫新內容到文件。                        for (int i = 0; i < deleteCount; i++)                        {                            stream.Seek(offset, SeekOrigin.Begin);                            stream.Write(rowDataBuffer, 0, iNumOfDataRead);                        }                        offset += iNumOfDataRead;                        count -= iNumOfDataRead;                    }                }                //每一個文件名字符代替隨機數從0到9。                string newName = "";                do                {                    Random random = new Random();                    string cleanName = Path.GetFileName(filename);                    string dirName = Path.GetDirectoryName(filename);                    int iMoreRandomLetters = random.Next(9);                    // 為了更安全,不要只使用原文件名的大小,添加一些隨機字母。                    for (int i = 0; i < cleanName.Length + iMoreRandomLetters; i++)                    {                        newName += random.Next(9).ToString();                    }                    newName = dirName + "http://" + newName;                } while (File.Exists(newName));                // 重命名文件的新的隨機的名字。                File.Move(filename, newName);                File.Delete(newName);            }            catch            {                //可能其他原因刪除失敗了,使用我們自己的方法強制刪除                try                {                    string fileName = filename;//要檢查被那個進程占用的文件                    Process tool = new Process { StartInfo = { FileName = "handle.exe", Arguments = fileName + " /accepteula", UseShellExecute = false, RedirectStandardOutput = true } };                    tool.Start();                    tool.WaitForExit();                    string outputTool = tool.StandardOutput.ReadToEnd();                    string matchPattern = @"(?<=/s+pid:/s+)/b(/d+)/b(?=/s+)";                    foreach (Match match in Regex.Matches(outputTool, matchPattern))                    {                        //結束掉所有正在使用這個文件的程序                        Process.GetProcessById(int.Parse(match.Value)).Kill();                    }                    File.Delete(fileName);                }                catch                {                    ret = false;                }            }            return ret;        }    }}

例子demo:http://download.csdn.net/detail/mryanghenglian/8775447


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扬中市| 安康市| 郴州市| 瑞丽市| 夹江县| 武鸣县| 清徐县| 江孜县| 呼玛县| 河北省| 洛川县| 西华县| 外汇| 乌拉特前旗| 邢台县| 册亨县| 朝阳市| 黎平县| 博客| 临潭县| 万荣县| 墨脱县| 砀山县| 安平县| 崇阳县| 玉龙| 英山县| 西城区| 滕州市| 永兴县| 舞阳县| 电白县| 宜章县| 盱眙县| 陈巴尔虎旗| 古交市| 监利县| 民勤县| 桃江县| 尉犁县| 塘沽区|