C# 确定路径是一个文件还是一个目录-当文件不存在时';还不存在

C# 确定路径是一个文件还是一个目录-当文件不存在时';还不存在,c#,.net,winforms,C#,.net,Winforms,我已经回顾了与我的情况相关的问题。 他们不会回答一个卑鄙的问题。 我的应用程序允许用户键入完全限定的路径。此路径必须指向一个文件。该文件尚不存在(他们正在保存备份)。如果您使用getattributes方法,它将触发try/catch的捕获,因为找不到该文件。(不应该如此)。我需要知道用户是否只是输入了一个目录的路径,以及该路径是否指向一个不存在的文件。如果发生任何一种情况,我都需要向用户提供直接反馈。我正在使用C#和.NET框架4.5.2 谢谢你的指点。你能试试这个,看看这是不是你想要的。我假

我已经回顾了与我的情况相关的问题。 他们不会回答一个卑鄙的问题。
我的应用程序允许用户键入完全限定的路径。此路径必须指向一个文件。该文件尚不存在(他们正在保存备份)。如果您使用getattributes方法,它将触发try/catch的捕获,因为找不到该文件。(不应该如此)。我需要知道用户是否只是输入了一个目录的路径,以及该路径是否指向一个不存在的文件。如果发生任何一种情况,我都需要向用户提供直接反馈。我正在使用C#和.NET框架4.5.2


谢谢你的指点。

你能试试这个,看看这是不是你想要的。我假设用户将输入文件的扩展名,正如您提到的那个样,用户将输入完全限定的路径

static void Main(string[] args)
    {
        Console.WriteLine("Enter fully qualified path of the file to be accessed.");
        var eneteredPath = Console.ReadLine();
        var isItFile = Path.HasExtension(eneteredPath);
        if (isItFile)
        {
            Console.WriteLine($"Specified File exists = {File.Exists(eneteredPath)}");
        }
        else if(Directory.Exists(eneteredPath))
        {
            Console.WriteLine($"Specified path is to a directory.");
        }
    }

我有一个简单的表单,有一个txtInput和一个按钮:

using System.IO;

private void cmdCheck_Click(object sender, EventArgs e)
    {
        if (Directory.Exists(txtInput.Text))
        {
            // This is a directory, not a file.
        }
        else
        {
            try
            {
                if (File.Exists(txtInput.Text))
                {
                    var fileInfo = new FileInfo(txtInput.Text);

                    // File exists and now we have the information.  Alert the user.
                }
                else
                {
                    // File doesn't exist.  Do things.
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine(ex.Message, "ERROR");
            }
        }
    }

这是否符合您的要求?

一个文件不一定要有文件扩展名才能成为有效文件。因此,不能依赖具有文件扩展名的路径将其称为文件

using System;

namespace FileFolder_46434099
{
    class Program
    {
        static void Main(string[] args)
        {
            string incomingpath = @"C:\temp\3075";
            if (System.IO.Directory.Exists(incomingpath))
            {
                Console.WriteLine("path is a directory");
            }
            else if (System.IO.File.Exists(incomingpath))
            {
                Console.WriteLine("path is of a file");
            }
            Console.ReadLine();
        }
    }
}
在这种情况下<代码>C:\temp\3075实际上是一个文件,程序会将其作为文件返回。

这将对您有所帮助

路径。这条路通向某处。它穿过树木和建筑物之间。云在移动。阳光照射到地面,我们的方向很清楚。
对于.NET Framework中的类Path,我们有内置的方法。此类有助于处理文件路径。它是System.IO的一部分。

“trip the catch of the try/catch”——这是什么意思?这是新功能吗?您需要做的就是首先确认完整路径不存在,然后删除最后一个路径段并确认它是一个现有目录。你能找出文件是否存在吗?你能找出目录是否存在吗?可以从字符串中删除路径段吗?这些都是无关紧要的。这里有一个链接,可以确定给定的输入是目录、文件还是不存在的:hads not
file.Exists
directory.Exists
方法帮助您解决问题?谢谢。我尝试过这些,但我的函数逻辑不正确。修好了,现在可以用了。谢谢。@KDecker您也可以使用不带扩展名的文件名Blaze_125提出了一个关于不需要扩展名的文件的好观点,所以我修改了我的答案。