c#中如何判断一个路径是目录还是文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c#中如何判断一个路径是目录还是文件相关的知识,希望对你有一定的参考价值。

因为文件夹名称中可以有".",而文件名称也可以没有后缀名,那要怎么判断这个对应的路径是文件夹还是文件,比如:D://aaa 这个可能是文件夹也可能是文件

1、在visual studio当中创建一个C#控制台应用程序,选择新建项目,然后选择visual C#,再选中控制台应用程序,输入项目名称,选择位置,确定即可。

2、创建完成之后,在program.cs中最上方加写using System.IO;,如图所示,注意后面的分号也要加。

3、然后代码如下图所示,判断C盘根目录下是否存在C#程序设计文件夹。staticvoid Main(string[] args) if (Directory.Exists(@"C:\\C#程序设计"))Console.WriteLine("存在C#程序设计文件夹。");elseConsole.WriteLine("不存在C#程序设计文件夹。");。

4、运行之后,因为此时C盘根目录下没有这个文件夹,所以提示不存在。

5、在C盘根目录下创建C#程序设计文件夹。

6、此时因为C盘目录下已经创建了这个文件夹,所以再次运行时,显示存在这个文件夹。

参考技术A 判断是否是文件夹:
System.IO.Directory.GetDirectories(); // 获取目录下面的文件夹
System.IO.Directory.Exists() // 判断文件夹存不存

判断是否是文件:
System.IO.Directory.GetFiles() // 获取目录下面的文件
System.IO.File.Exists() // 判断文件存不存在
参考技术B string path = @"D:\aaa";
if (Directory.Exists(path))

Console.WriteLine("文件夹");

else

if (File.Exists(path))

Console.WriteLine("文件");

else

Console.WriteLine("无效路径");


Console.Read();

如何通过 C# 判断一个 路径 是本机还是远程 ?

咨询区

  • David Boike

请问在 C# 中是否有好的方式判断 path 是在本地还是在远程,我想到了用 UNC 属性来判断,比如下面的代码:

new Uri(path).IsUnc

但这代码也有一定的问题,它会误判下面的 path 格式。

\\\\machinename\\sharename\\directory
\\\\10.12.34.56\\sharename\\directory

上面这两种格式也是在本地,而不是远程。

回答区

  • Stephen

我是借助 Shlwapi.dll 这个 win32 api 来实现的,可以用它来判断当前的 path 来自于 drivers 还是 UNC。

private static bool IsLocalPath(String path)

    if (!PathIsUNC(path))
    
        return !PathIsNetworkPath(path);
    

    Uri uri = new Uri(path);
    return IsLocalHost(uri.Host); // Refer to David's answer


[DllImport("Shlwapi.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PathIsNetworkPath(String pszPath);

[DllImport("Shlwapi.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PathIsUNC(String pszPath);
  • Eric Rosenberger

可以通过 path 的 host 来判断当前是否为 回路地址,我不知道这是否是最高效的解决方案,但适合我。

IPAddress[] host;
    IPAddress[] local;
    bool isLocal = false;

    host = Dns.GetHostAddresses(uri.Host);
    local = Dns.GetHostAddresses(Dns.GetHostName());

    foreach (IPAddress hostAddress in host)
    
        if (IPAddress.IsLoopback(hostAddress))
        
            isLocal = true;
            break;
        
        else
        
            foreach (IPAddress localAddress in local)
            
                if (hostAddress.Equals(localAddress))
                
                    isLocal = true;
                    break;
                
            

            if (isLocal)
            
                break;
            
        
    
  • Renato Heeb

我是通过 path 的 DriverInfoDriverType = Network 来判断当前是否为远程。

public static bool IsLocal(DirectoryInfo dir)
    
        foreach (DriveInfo d in DriveInfo.GetDrives())
        
            if (string.Compare(dir.Root.FullName, d.Name, StringComparison.OrdinalIgnoreCase) == 0) //[drweb86] Fix for different case.
            
                return (d.DriveType != DriveType.Network);
            
        
         throw new DriveNotFoundException();
    

点评区

这场景我还真的遇到过,曾经给医院内网部署桌面程序时,需要读取局域网共享文件中的 txt 文本,三位大佬提供的方案很全面,学习了。

以上是关于c#中如何判断一个路径是目录还是文件的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 C# 判断一个 路径 是本机还是远程 ?

如何判断hdfs(hadoop)上的路径是文件还是目录。

C++ 如何判断路径是文件还是目录

C# 判断一个目录(路径)是不是存在

c#中如何检测文件路径是不是存在

c#中如何访问虚拟目录路径?