【问题标题】:how to verify if an input read from console is a file name or a file full path如何验证从控制台读取的输入是文件名还是文件完整路径
【发布时间】:2016-07-19 11:13:54
【问题描述】:

我有一个 C# 控制台应用程序,我想加载一个 xml 文件,该文件的路径是通过 console.readline() 提供的。但是,我想从提供的路径加载文件,但如果用户只提供文件的名称,我想在应用程序运行的本地文件夹中搜索它。我怎么知道我什么时候只得到一个文件名作为输入或文件完整路径。 我使用:var isFileNameOnly = ((xmlFilePath.IndexOf("\\")) == -1);

但是这丑陋而且可能非常有问题。

完整代码:

        var xmlFilePath = Console.ReadLine();
        var xmlFile = new XmlDocument();

        var isFileNameOnly = ((xmlFilePath.IndexOf("\\")) == -1);
        try
        {
            if (isFileNameOnly)
            {
                xmlFilePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, xmlFilePath);
            }

            xmlFile.Load(xmlFilePath);

        }

谢谢

【问题讨论】:

    标签: c# xml directory console-application filepath


    【解决方案1】:

    您可以使用 Exists() 方法检查用户输入的文件名是否确实存在。如果返回 true,则加载文件。

    File.Exists(xmlFilePath) 
    

    如果只提供文件名,XmlDocument.Load() 也将尝试在 BaseDirectory 本身中查找文件。因此,如果 file.Exists() 返回 true,您可以假设 XmlDocument.Load 将加载它,无论它是本地路径还是绝对路径。

    【讨论】:

    • 是的,但是,如果我尝试从命令行 (cmd) 执行应用程序,XmlDocument.Load() 将尝试在 C:\user\myuser 中而不是 BaseDirectory 中查找文件\ 所以我必须知道它是否是一个文件,以便我可以将 BaseDirectory 路径附加到文件中。我认为将附加基本目录,然后验证它是否存在。谢谢
    【解决方案2】:

    这将返回 false:

    bool isFolder = Path.IsPathRooted(@"Text.txt");
    

    这将返回 true:

    bool isFolder = Path.IsPathRooted(@"C:\Text");
    

    【讨论】:

    • 如果用户指定了相对路径,这将不起作用。
    【解决方案3】:

    您的方法与我选择的方法相同。如果参数不包含任何目录分隔符字符,则它只能是文件名。如果你这样做可能会更优雅一点:

    bool isFileNameOnly = !xmlFilePath.Contains(Path.DirectorySeparatorChar.ToString());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-26
      • 1970-01-01
      • 2021-06-01
      • 2012-09-13
      相关资源
      最近更新 更多