验证用于目录创建的文件路径

时间:2018-10-12 13:26:52

标签: c# .net path directory

我正在使用Directory.CreateDirectory(string)方法创建文件夹,现在的问题是,如果用户输入的字符串为:

"C:\folder1",然后在相应位置创建该文件夹,对我来说很好。

但是如果他写

"C:\\\\\\\\\\\\\\\\\\\\\\\\\folder1"还在导航到相同的路径,创建了文件夹并且没有出现任何错误,这对我来说是个问题。

因此,为了解决上述问题,我尝试在路径上进行一些验证,然后尝试使用Path.GetFullPath() and other Path methods,然后看到:

Path.GetFullPath("C:\\\\folder1") no exception or error
Path.GetFullPath("C:\\\folder1") exception or error

以某种方式,当反斜杠的计数为偶数时,不会引发异常,但是当反斜杠的计数为奇数时,则会引发异常。

当用户输入路径时,如何实现这一简单的功能:

C:\folder 1   valid path
C:\\\\\\folder1   invalid path

如果需要更多详细信息,请告诉我

3 个答案:

答案 0 :(得分:0)

使用FolderBrowserDialog的可能解决方案-用户将不会手动输入路径,而是通过FolderBrowserDialog选择/创建路径。

以下代码将返回文件夹中的所有文件,但您可以对其进行修改以返回所需的任何信息。

private void Form1_Load(object sender, EventArgs e)
        {
            //
            // This event handler was created by double-clicking the window in the designer.
            // It runs on the program's startup routine.
            //
            DialogResult result = folderBrowserDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                //
                // The user selected a folder and pressed the OK button.
                // We print the number of files found.
                //
                string[] files = Directory.GetFiles(folderBrowserDialog1.SelectedPath);
                MessageBox.Show("Files found: " + files.Length.ToString(), "Message");
            }
        }

Code found here

答案 1 :(得分:0)

如果您想从中获得正确的路径,也许可以使用以下技术(当然,除了已经拥有的技术之外,这只是删除重复的反斜杠)

  • 使用'\'字符分隔路径
  • 删除空值(您可以在此处过滤无效值 字符等)
  • 再次使用连接符'\'重建路径字符串

类似的东西:

        pathString = "C:\\\\\\folder1";
        splitString = pathString.Split('\\');

        nonEmpty = splitString.Where(x => !string.IsNullOrWhiteSpace(x));

        reconstructed = string.Join("\\", nonEmpty.ToArray());

此处测试代码:https://dotnetfiddle.net/qwVqv8

答案 2 :(得分:0)

如何清洁路径?

        char[] separator = new char[] { System.IO.Path.DirectorySeparatorChar };
        string inputPath = "C:\\\\\\\folder1";

        string[] chunks = inputPath.Split(separator, StringSplitOptions.RemoveEmptyEntries);
        string validPath = String.Join(new string(separator), chunks);