验证目录创建的文件路径

问题描述 投票:0回答:3

我使用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

如果需要进一步的详细信息,请告诉我

c# .net path directory
3个回答
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


0
投票

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

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

就像是:

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

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

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

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


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);
© www.soinside.com 2019 - 2024. All rights reserved.