检查路径是目录还是文件C#

时间:2015-07-21 20:29:30

标签: c#

我试图检查已删除目录或文件的路径是否是目录或文件的路径。我找到了这段代码:

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中的文件。

我试过的东西,但没什么用。

有可能实现这个目标吗?

谢谢!

1 个答案:

答案 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 ;
}

应该注意,在此过程中可以抛出任意数量的异常。