参考链接:https://codedefault.com/s/ways-to-check-if-a-path-is-a-file-or-directory-in-csharp-application

问题描述

在.NET/C#编程开发中,当前需要根据指定的字符串路径判断这路径是指向的文件还是文件夹,有哪些方法可以实现呢?

方案一

使用File.GetAttributes()方法,如下:

  1. FileAttributes attr = File.GetAttributes(@"c:\Temp");
  2. if ((attr & FileAttributes.Directory) == FileAttributes.Directory)
  3. MessageBox.Show("Its a directory");
  4. else
  5. MessageBox.Show("Its a file");

如果在.NET Framework 4.0或者以上版本中,我们甚至可以使用更简单的代码来实现此功能,使用FileAttributes.HasFlag()方法,如下:

  1. FileAttributes attr = File.GetAttributes(@"c:\Temp");
  2. if (attr.HasFlag(FileAttributes.Directory))
  3. MessageBox.Show("Its a directory");
  4. else
  5. MessageBox.Show("Its a file");

方案二

超级简单的.NET/C#检测方法,如下:

  1. File.Exists();
  2. Directory.Exists();

方案三

在.NET Framework 4.0及以上版本,一条语句即可实现,如下:

  1. File.GetAttributes(data.Path).HasFlag(FileAttributes.Directory)

方案四

  1. bool IsPathDirectory(string path)
  2. {
  3. if (path == null) throw new ArgumentNullException("path");
  4. path = path.Trim();
  5. if (Directory.Exists(path))
  6. return true;
  7. if (File.Exists(path))
  8. return false;
  9. if (new[] {"\\", "/"}.Any(x => path.EndsWith(x)))
  10. return true; // ends with slash
  11. return string.IsNullOrWhiteSpace(Path.GetExtension(path));
  12. }

方案五

一种文件夹检测的实现,如下:

  1. using System.IO;
  2. public static class FileSystemInfoExtensions
  3. {
  4. public static bool IsDirectory(this FileSystemInfo fileSystemInfo)
  5. {
  6. if (fileSystemInfo == null)
  7. {
  8. return false;
  9. }
  10. if ((int)fileSystemInfo.Attributes != -1)
  11. {
  12. return fileSystemInfo.Attributes.HasFlag(FileAttributes.Directory);
  13. }
  14. return fileSystemInfo is DirectoryInfo;
  15. }
  16. }

郑重申明:本文未经许可,禁止任何形式转载
[_

_]()