在C#中将文件夹设置为用户指定的路径

时间:2015-01-13 17:28:18

标签: c#

我正在尝试将我的控制台应用程序的当前文件夹设置为C#中的用户指定路径,但我无法做到。我是编程新手,C#是我的第一语言。 这是到目前为止的代码,我不知道我在哪里出错我已经在互联网上搜索了这个,按照步骤但是它没有将文件夹设置为用户指定的内容。我在这里要做的是将文件夹路径更改为用户想要的内容,并将其设置为当前文件夹,然后用户可以从中访问其文件。

   DirectoryInfo folderInfo = new DirectoryInfo("C:\\Windows");
   FileInfo[] files = folderInfo.GetFiles();

   Console.WriteLine("Enter Folder Name");
   string userInput = Console.ReadLine();
   FileInfo[] fileType = folderInfo.GetFiles(userInput + "*" + ".", SearchOption.TopDirectoryOnly); //searches for the folder the user has specified 
   Directory.SetCurrentDirectory(userInput);

   Console.WriteLine("{0}", userInput );
   Console.ReadLine();

我得到的错误是

"An unhandled exception of type 'System.IO.DirectoryNotFoundException' occurred in mscorlib.dll"

Additional information: Could not find a part of the path 'folder name here'.

请记住我是初学者。 提前谢谢

2 个答案:

答案 0 :(得分:1)

当您调用DirectoryInfo.GetFiles时,第一个参数是文件模式(like *.* or *.txt),但您也可以指定引用文件夹的子文件夹。但是,您需要遵守指定文件夹的语法规则。创建文件夹名称的最佳方法是通过路径类的各种静态方法

DirectoryInfo folderInfo = new DirectoryInfo("C:\\Windows");
Console.WriteLine("Enter Folder Name");
string userInput = Console.ReadLine();
string subFolder = Path.Combine(folderInfo.FullName, userInput);

// Check to verify if the user input is valid
if(Directory.Exists(subFolder))
{
    FileInfo[] fileType = folderInfo.GetFiles(Path.Combine(userInput, "*.*"), 
                                     SearchOption.TopDirectoryOnly);
    Directory.SetCurrentDirectory(subFolder);
    Console.WriteLine("{0}", Directory.GetCurrentDirectory());
}
else 
    Console.WriteLine("{0} doesn't exist", subFolder);

作为DirectoryInfo路径问题的一部分,您还应该考虑SetCurrentDirectory可以使用相对路径,但它被认为是相对于CurrentDirectory而不是初始化C:\ WINDOWS(除非C:\ WINDOWS是当前工作目录),所以如果你能提供一个完整的SetCurrentDirectory路径,你会更安全。

答案 1 :(得分:0)

您绝对需要“目录”的完整路径才能正常工作。

换句话说,它永远不会找到“用户”或“Windows”,它 是“C:\ Windows”。相对路径将起作用,但它相对于当前工作目录(应用程序目录)。

如果您希望这样做,则需要运行:

Directory.SetCurrentDirectory("C:\\");

运行文件搜索之前,相对路径将正确评估。此外,你的搜索模式搞砸了,你没有包含用户输入,正如@Steve所提到的那样。