C# 删除文件夹问题!!!

时间:2022-09-03 19:50:31
如题:
  虽然小弟知道C#对于一个文件夹里有子夹,子夹里有文件的文件夹是不能直接删除的,是要通过历遍子夹里的文件删除后再递归删除文件夹,但小弟又想了想,WINDOWS里有一个CMD命令是可以直接删除文件夹的...所以小弟就想通过生成一个.bat文件,用线程调用它来实现删除文件夹,可惜是失败了...

  情况是这样:那个.bat文件在C#线程调用的情况下,是有工作,但不作为...没有把文件夹删除,里边的文件也一动不动.但当我把这个.bat文件保存起来时,在WINDOWS底下一运行,就什么都做好了...不知这是为什么,请大侠们帮帮忙....



 Process pro = new Process();

                pro.StartInfo.UseShellExecute = false;

                pro.StartInfo.RedirectStandardInput = true;

                pro.StartInfo.RedirectStandardOutput = true;

                pro.StartInfo.RedirectStandardError = true;

                pro.StartInfo.CreateNoWindow = true;

                string bat = "rd /q /s oracle";
                //string fileName=Path.Combine(System.Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), "temp.bat");
                string fileName = @"C:\temp.bat";
                StreamWriter swWriter = new StreamWriter(fileName);
                swWriter.WriteLine(bat);
                swWriter.Flush();
                swWriter.Close();

                pro = Process.Start(fileName);
                //File.Delete(fileName);


10 个解决方案

#1



Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>del/?
删除一个或数个文件。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

  names         指定一个或多个文件或者目录列表。
                通配符可用来删除多个文件。
                如果指定了一个目录,该目录中的所
                有文件都会被删除。

  /P            删除每一个文件之前提示确认。
  /F            强制删除只读文件。
  /S            删除所有子目录中的指定的文件。
  /Q            安静模式。删除全局通配符时,不要求确认
  /A            根据属性选择要删除的文件
  属性          R  只读文件                     S  系统文件
                H  隐藏文件                     A  存档文件
                I  无内容索引文件               L  重分析点
                -  表示“否”的前缀

如果命令扩展被启用,DEL 和 ERASE 更改如下:

/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。

C:\Users\Administrator>

#2


用C#,下例可删除“d:\1"目录及其下的所有子目录。

Directory.Delete("d:\\1", true);

#3


晕...不可能通删的...必须是先删了里边的文件,才可以删夹的!!

#4


UP    ~~~~

#5


直接写一个递归不就解决问题了吗
干嘛搞的那么复杂

#6


我也想,但里边的文件超多呢!!

#7


引用楼主 ivanho 的回复:
如题:
  虽然小弟知道C#对于一个文件夹里有子夹,子夹里有文件的文件夹是不能直接删除的,是要通过历遍子夹里的文件删除后再递归删除文件夹……


嗯?是谁告诉你这一点的呢??

呵呵,不过据我所知是可以的(我操作文件,操作很久了):

System.IO.Directory.Delete("filePath",true);



#8


如果是asp.net的话有可能是权限问题

#9


进程用户权限限制...你要先搞明白,当前用户和进程用户是两码事,虽然有些进程是用当前用户启动的...

#10


xin4036兄 提出的方法是可行的,但我就不明白,因为我以前做过一个也是对文件夹删除的操作,但都是报错,从一个前辈那得到方法就是先历遍文件夹里的文件逐个删除后,再删夹.最后是实现了,所以小弟就一直认为是这样子...(因为当时我也尝试过您说的方法去删夹的,但都是不成功的,但不知为什么这次就成功了!)

另:关于权限问题,我是单一用户,所以线程也是同一个用户...

#1



Microsoft Windows [版本 6.1.7600]
版权所有 (c) 2009 Microsoft Corporation。保留所有权利。

C:\Users\Administrator>del/?
删除一个或数个文件。

DEL [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names
ERASE [/P] [/F] [/S] [/Q] [/A[[:]attributes]] names

  names         指定一个或多个文件或者目录列表。
                通配符可用来删除多个文件。
                如果指定了一个目录,该目录中的所
                有文件都会被删除。

  /P            删除每一个文件之前提示确认。
  /F            强制删除只读文件。
  /S            删除所有子目录中的指定的文件。
  /Q            安静模式。删除全局通配符时,不要求确认
  /A            根据属性选择要删除的文件
  属性          R  只读文件                     S  系统文件
                H  隐藏文件                     A  存档文件
                I  无内容索引文件               L  重分析点
                -  表示“否”的前缀

如果命令扩展被启用,DEL 和 ERASE 更改如下:

/S 开关的显示句法会颠倒,即只显示已经
删除的文件,而不显示找不到的文件。

C:\Users\Administrator>

#2


用C#,下例可删除“d:\1"目录及其下的所有子目录。

Directory.Delete("d:\\1", true);

#3


晕...不可能通删的...必须是先删了里边的文件,才可以删夹的!!

#4


UP    ~~~~

#5


直接写一个递归不就解决问题了吗
干嘛搞的那么复杂

#6


我也想,但里边的文件超多呢!!

#7


引用楼主 ivanho 的回复:
如题:
  虽然小弟知道C#对于一个文件夹里有子夹,子夹里有文件的文件夹是不能直接删除的,是要通过历遍子夹里的文件删除后再递归删除文件夹……


嗯?是谁告诉你这一点的呢??

呵呵,不过据我所知是可以的(我操作文件,操作很久了):

System.IO.Directory.Delete("filePath",true);



#8


如果是asp.net的话有可能是权限问题

#9


进程用户权限限制...你要先搞明白,当前用户和进程用户是两码事,虽然有些进程是用当前用户启动的...

#10


xin4036兄 提出的方法是可行的,但我就不明白,因为我以前做过一个也是对文件夹删除的操作,但都是报错,从一个前辈那得到方法就是先历遍文件夹里的文件逐个删除后,再删夹.最后是实现了,所以小弟就一直认为是这样子...(因为当时我也尝试过您说的方法去删夹的,但都是不成功的,但不知为什么这次就成功了!)

另:关于权限问题,我是单一用户,所以线程也是同一个用户...