C#调用命令行删除文件及文件夹

/// <summary>
/// cmd
/// </summary>
public class CmdHelper
{
    /// <summary>
    /// 命令行删除文件
    /// </summary>
    /// <param name="fullPath"></param>
    public static void CmdDelFile(string fullPath)
    {
        try
        {
            string cmd = "del /f /q \"" + fullPath +"\"";// /Q 是静默执行
            RunCmd(cmd, out string output);
        }
        catch(Exception ex)
        {
        }
    }
    /// <summary>
    /// 命令行删除文件夹及子文件
    /// </summary>
    /// <param name="fullPath"></param>
    public static void CmdDelDir(string fullPath)
    {
        try
        {
            string cmd = "rmdir /s/q \""+fullPath+"\"";// /S 删除文件夹及文件夹下的子文件和文件夹
            RunCmd(cmd, out string output);
            Logger.Write(typeof(CmdHelper), EnumLogLevel.Info, output);
        }
        catch(Exception ex)
        {
        }
    }
    /// <summary>
    /// 执行Cmd命令
    /// </summary>
    public static void RunCmd(string cmd, out string output)
    {
        cmd = cmd.Trim().TrimEnd(‘&‘) + "&exit";//不管命令是否成功,均质性exit
        using (Process p = new Process())
        {
            string cmdPath = System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.System), "cmd.exe");
            p.StartInfo.FileName = "cmd.exe";
            p.StartInfo.Arguments = "/c " + cmdPath;
            p.StartInfo.UseShellExecute = false;
            p.StartInfo.RedirectStandardError = true;
            p.StartInfo.RedirectStandardInput = true;
            p.StartInfo.RedirectStandardOutput = true;
            p.StartInfo.CreateNoWindow = true;
            p.StartInfo.Verb = "RunAs";
            p.Start();
            p.StandardInput.WriteLine(cmd);
            p.StandardInput.AutoFlush = true;
            output = p.StandardOutput.ReadToEnd();
            p.WaitForExit();//等待程序执行完,退出进程
            p.Close();
        }
    }
}

使用这种方式的好处是:

1、可以删除只读文件

2、可以删除正在打开的文件(调用删除后,关闭打开的文件,自动消失)

3、主程序已管理员身份运行,可删除有管理员权限的文件

4、即便是删除不掉文件,不影响程序继续运行

对比:

使用File.Delete(filePah) 和Dierctory.Delete(dirPath,true)删除文件和文件夹时,如果文件只读、被占用、没有删除权限,会抛出异常

原文地址:https://www.cnblogs.com/JqkAman/p/12627041.html

时间: 2024-11-09 11:41:24

C#调用命令行删除文件及文件夹的相关文章

java 调用命令行执行ruby ruby文件必须放在项目跟目录

import java.io.BufferedReader;import java.io.InputStreamReader; public class CMD_RUBY { private static String exeCmd(String commandStr) { BufferedReader br = null; try { Process p = Runtime.getRuntime().exec(commandStr); br = new BufferedReader(new I

用bat批处理程序通过DOS命令行删除所有的空文件夹

用过gothub或者码云的同学都知道,不包含任何文件的空文件夹上传提交时不被允许的.当然你可以在空文件下创建.keep文件(或.gitkeep文件),然后就可以上传了. 但是如果空文件夹比较多,并且我们确实不需要这些空文件了,那本文就学习一种命令行删除所有空文件夹的方法.并封装成.bat批处理程序.通过鼠标右键运行即可. 一,DOS删除命令 1.1,删除文件命令 del 若是想删除文件,输入del 盘符名:\文件名,比如,我想删除一个在F盘的名为123.txt的文件,则输入  del f:\12

Linux命令行批量替换多文件中的字符串【转】

Linux命令行批量替换多文件中的字符串[转自百度文库] 一种是Mahuinan法,一种是Sumly法,一种是30T法分别如下: 一.Mahuinan法: 用sed命令可以批量替换多个文件中的字符串.sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录` 例如:我要把mahuinan替换为huinanma, 执行命令:sed -i "s/mahuinan/huinanma/g" 'grep mahuinan -rl /www' 这是目

如何编写一个带命令行参数的Python文件

看到别人执行一个支持命令行参数的python文件,瞬间觉得高大上起来.牛逼起来,那么如何编写一个带命令行参数的python脚本呢?不用紧张,下面将简单易懂地让你学会如何让自己的python脚本,支持命令行参数. 首先你要知道python中的sys模块的一些功能: import sys print "the number of python program's argument:",len(sys.argv) print "the value of every argument

Ubuntu下用命令行快速打开各类型文件(转)

nautilus /media/pm/文档/book/system/必读nautilus /media/pm/文档/book/android/ndk 内核/framerwork/android waitReadxdg-open /media/pm/文档/book/system/必读/深入理解linux内核.pdf ubuntu 下一个神奇的命令--以窗口形式打开某个文件夹 今天意外的发现的一个命令 nautilus /media/ 会以窗口的形式打开某个目录,以后写脚本可以用到. Ubuntu下

命令行编译的class文件在Myeclipse的服务器上产生UnsupportedClassVersionError的解决办法

假设我们已经在命令行里面把java文件编译成class文件了.然后把它布置到tomcat服务器上,则我们可以看到服务器的控制台上会出现以下信息 其中我们关心的一行是 严重: Exception invoking periodic operation: java.lang.UnsupportedClassVersionError: FirstServlet2 : Unsupported major.minor version 52.0 (unable to load class FirstServ

Ubuntu下命令行方式对PDF文件进行缩放、合并、拆分

安装软件: sudo aptitude install ghostscript 然后执行命令: gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -sOutputFile=new_file.pdf original_file.pdf PDFSETTINGS参数说明: /screen - 最低精度方式输出,因为屏幕展示所需的精度很低/ebook - 中等精度输出/printer

命令行下从bak文件恢复sqlserver数据库方法

http://blog.sina.com.cn/s/blog_5cdf6f450102dwir.html 1.先使用restore filelistonly restore filelistonly from disk = 'E:\BaiduYunDownload\shifenzheng.bak' 2.进行恢复 restore database kaifang from disk = 'E:\BaiduYunDownload\shifenzheng.bak' with move 'linshi'

QT中QProcess调用命令行的痛苦经历

阅读目录 创建压缩包的方法 在QT中调用命令行 在QT中调用C++创建的dll 在QT程序中需要将某些目录和文件压缩为一个rar的压缩包,于是想到了在QT中通过QProcess类调用命令行的rar.exe来达到效果,但是没想到QProcess类用起来很麻烦,而且达不到效果,折腾了2天仍然没找到原因,使用另外一种办法解决了. 回到顶部 创建压缩包的方法 在windows平台创建压缩包,可以直接使用rar.exe,该程序在安装winrar之后,在其安装目录下就可以找到.该程序是winrar对应的命令