文件路径作为命令行参数

Nir*_*ani 5 c# string filepath command-line-arguments

这是很平常的事情,但是我对此感到非常困惑。

在c#中将文件路径作为命令行参数。

如果我输入“ F:\\”,那么这很完美。

但是当我输入“ F:\”时,它的输出就像F:“

我知道这是因为反斜杠转义字符。

但是我的问题是,在逻辑上用户输入是正确的,如何在不修改用户输入的情况下解决此问题。

在这种情况下是否可以不修改用户输入就获得正确的路径?

我也知道有@字符可以使用。

但是正如我所说的,这是命令行参数,因此字符串已经在变量中。

我也阅读了一些博客,但仍然无法解决我的问题。

引用路径的C#命令行解析和避免转义符

编辑:实际上,我的程序是列出目录内的所有文件,因此我首先检查Directory.Exists(命令行参数),然后如果目录存在则获取所有文件的列表。

好的,在这种情况下,当用户按照上面的逻辑给出用户名作为命令行参数时,该驱动器就存在了,但是由于转义字符,它返回了false。

只需考虑如下打印命令行参数即可。

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("{0}", args[0]);

        Console.Read();
    }
}
Run Code Online (Sandbox Code Playgroud)

我对C#的了解很少,谢谢您的帮助。

Chr*_*ray 1

我不确定你为什么在这里遇到问题。在 M$ Windows 中,可以使用或不使用反斜杠来指定目录,因此所有这些都是正确的:c:andc:\c:\mediaand c:\media\Directory.Exists(path)这对于和其他函数(如 )是相同的Directory.GetFiles(path)

下面是一个非常简单的应用程序,用于列出目录文件,在我的环境中,无论我是否在末尾添加斜杠,它都可以工作。所以c:\media\给了我所有的媒体文件。

class Program
{
    static void Main(string[] args)
    {
        string path = args[0];
        Console.WriteLine("trying path: " + path);
        if (Directory.Exists(path))
            Directory.GetFiles(path).ToList().ForEach(s => Console.WriteLine(s));
        else
            Console.WriteLine("path not found");
    }
}
Run Code Online (Sandbox Code Playgroud)

需要注意的一点是,在 Visual Studio 中,当使用Quick Watch等调试器时,它会显示带有反斜杠的转义字符。因此,如果用户输入c:\media\字符串将被存储为,c:\media\但是当您快速观察VS 中的路径时,您会看到c:\\media\\;使用文本可视化功能更深入地查看,您将看到路径正确显示为c:\media\