C# 无法同时删除文件和目录
我正在研究CompactFramework 3.5。我可以使用C# 无法同时删除文件和目录,c#,compact-framework,delete-file,C#,Compact Framework,Delete File,我正在研究CompactFramework 3.5。我可以使用File.delete()删除文件,也可以使用我的方法删除目录 问题是:我只能调用File.Delete()方法或我的目录删除方法(名称为DD)。它们都能工作,但不能一起工作。这是我的密码: using System; using System.Diagnostics; using System.IO; using System.Linq; using System.Collections.Generic; using System.
File.delete()
删除文件,也可以使用我的方法删除目录
问题是:我只能调用File.Delete()
方法或我的目录删除方法(名称为DD)。它们都能工作,但不能一起工作。这是我的密码:
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Reset_Client
{
static class Program
{
static void Main()
{
string path = @"\Storage Card\deneme\";
File.Delete(path + "Agentry.ini");
File.Delete(path + "Agentry.app");
File.Delete(path + "Agentry.usr");
//DF(path);
DD(path);
MessageBox.Show("Cihaz resetlendi!");
}
public static void DD(string mainPath)
{
try
{
DeleteDirectory(mainPath + "CRM");
DeleteDirectory(mainPath + "BHTS");
DeleteDirectory(mainPath + "IMAGES");
DeleteDirectory(mainPath + "STYLES");
DeleteDirectory(mainPath + "TABLES");
DeleteDirectory(mainPath + "LOG");
}
catch (IOException e)
{
DD(mainPath);
}
}
//public static void DF(string mainPath)
//{
// try
// {
// DeleteFile(mainPath + "Agentry.ini");
// DeleteFile(mainPath + "Agentry.app");
// DeleteFile(mainPath + "Agentry.usr");
// }
// catch (IOException e)
// {
// DF(mainPath);
// }
//}
public static void DeleteDirectory(string target_dir)
{
FileInfo fileInfo = new FileInfo(target_dir);
FileAttributes attributes = fileInfo.Attributes;
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
// set the attributes to nonreadonly
fileInfo.Attributes &= ~FileAttributes.ReadOnly;
}
string[] files = Directory.GetFiles(target_dir);
string[] dirs = Directory.GetDirectories(target_dir);
foreach (string file in files)
{
File.Delete(file);
}
foreach (string dir in dirs)
{
DeleteDirectory(dir);
}
Directory.Delete(target_dir, false);
}
public static void DeleteFile(string target_dir)
{
FileInfo fileInfo = new FileInfo(target_dir);
FileAttributes attributes = fileInfo.Attributes;
if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
{
// set the attributes to nonreadonly
fileInfo.Attributes &= ~FileAttributes.ReadOnly;
}
}
}
}
以下可能是您的问题
通常,您只能删除空目录。您的
DD
函数必须沿着目录路径递归,找到所有文件,并调用File.Delete
,然后再删除包含它们的目录。您可以使用directory.Delete(target\u dir,true)替换DD方法直接删除目录。第二个参数为true,表示递归。
还有一点。如果发生任何IO异常。DD方法捕获异常并再次调用DD方法。这将是一个死循环。这是我的一个剪贴画。我不记得是从什么地方得到的,还是我写的。这应该做你想做的事情
public void ClearFolder(string folderName)
{
DirectoryInfo dir = new DirectoryInfo(folderName);
foreach (FileInfo fi in dir.GetFiles())
{
fi.Delete();
}
foreach (DirectoryInfo di in dir.GetDirectories())
{
ClearFolder(di.FullName);
di.Delete();
}
}
我会像这样尝试,看看是否有效
using System;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Collections.Generic;
using System.Windows.Forms;
namespace Reset_Client
{
static class Program
{
static void Main()
{
string path = @"\Storage Card\deneme\";
File.Delete(path + "Agentry.ini");
File.Delete(path + "Agentry.app");
File.Delete(path + "Agentry.usr");
//DF(path);
DD(path);
MessageBox.Show("Cihaz resetlendi!");
}
public static void DD(string mainPath)
{
try
{
ClearFolder(mainPath + "CRM");
ClearFolder(mainPath + "BHTS");
ClearFolder(mainPath + "IMAGES");
ClearFolder(mainPath + "STYLES");
ClearFolder(mainPath + "TABLES");
ClearFolder(mainPath + "LOG");
}
catch (IOException e)
{
DD(mainPath);
}
}
public void ClearFolder(string folderName)
{
DirectoryInfo dir = new DirectoryInfo(folderName);
foreach (FileInfo fi in dir.GetFiles())
{
fi.Delete();
}
foreach (DirectoryInfo di in dir.GetDirectories())
{
ClearFolder(di.FullName);
di.Delete();
}
}
}
}
请定义“不一起工作”的主要含义;如果我只调用File.Delete(路径+“Agentry.ini”);File.Delete(路径+“Agentry.app”);Delete(路径+“Agentry.usr”);它删除文件。或者,如果我只调用DD(path),它就会工作;但是当我调用所有这些文件时,它都不起作用。你能扩展到“不起作用”吗?它是否会引发异常,错误消息是什么,等等?没有错误消息,DD方法会删除目录,但File.Delete()方法不会删除这3个文件。