我试图检查已删除目录或文件的路径是否是目录或文件的路径。我找到了这段代码:
FileAttributes attr = File.GetAttributes(@"C:\Example");
if (attr.HasFlag(FileAttributes.Directory))
MessageBox.Show("It's a directory");
else
MessageBox.Show("It's a file");
但是,此代码不适用于已删除的目录或文件。
我有两个文件夹
C:\Dir1
C:\Dir2
在Dir1中有正常文件,如" test.txt",在Dir2中有压缩文件,如" test.rar"或" test.zip"当删除Dir1中的文件时,我需要删除Dir2中的文件。
我试过的东西,但没什么用。
有可能实现这个目标吗?
谢谢!
答案 0 :(得分:1)
如果路径所代表的对象不存在或已从文件系统中删除,那么您所拥有的只是一个表示文件系统路径的字符串:它不是任何东西。
指示路径是目标(而不是文件)的常规约定是使用目录分隔符终止它,所以
c:\foo\bar\baz\bat
用于表示文件,而
c:\foo\bar\baz\bat\
用于表示目录。
如果您想要删除文件系统条目(文件或目录,递归删除其内容和子目录),那么就足够了:
public void DeleteFileOrDirectory( string path )
{
try
{
File.Delete( path ) ;
}
catch ( UnauthorizedAccessException )
{
// If we get here,
// - the caller lacks the required permissions, or
// - the file has its read-only attribute set, or
// - the file is a directory.
//
// Either way: intentionally swallow the exception and continue.
}
try
{
Directory.Delete( path , true ) ;
}
catch ( DirectoryNotFoundException )
{
// If we get here,
// - path does not exist or could not be found
// - path refers to a file instead of a directory
// - the path is invalid (e.g., on an unmapped drive or the like)
//
// Either way: intentationally swallow the exception and continue
}
return ;
}
应该注意,在此过程中可以抛出任意数量的异常。