为什么Directory.GetFiles()不接受变量的输入?

时间:2015-04-16 10:02:00

标签: c# filesystems

using System;
using System.IO;
namespace GetFilesFromDirectory
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Write your Name of Disc");
            string myDisc = Console.ReadLine();
            string myDisc1 = "@\"";
            Console.WriteLine("Write your Directory");
            string myDir1 = Console.ReadLine();
            string myDir = ":\\";
            string myDir2 = "\\\"";
            string myPath = myDisc1 + myDisc + myDir + myDir1 + myDir2;
            Console.WriteLine(myPath);
            string[] filePaths = Directory.GetFiles(myPath);


            foreach (var files in filePaths)
            {
                Console.WriteLine(files);
            }
            Console.ReadLine();
        }

    }
}

2 个答案:

答案 0 :(得分:0)

从我可以告诉您的myPath看起来像@"discName:\dirName\",您不需要附加@""

当您创建一个新的字符串变量以注意它是String literal时,会使用这些符号,但是您要在生成的实际字符串中包含这些字符。

换句话说,请删除myDisc1myDir2

正如DrKoch所指出的那样更好。

 string myPath = Path.Combine(myDisc + @":\", myDir1);

答案 1 :(得分:0)

试试这个

 static void Main(string[] args)
    {
        Console.WriteLine("Write your Name of Disc");
        //You need to add :\ to make it a fullPath
        string myDisc = Console.ReadLine()+":\\";

        Console.WriteLine("Write your Directory");
        string myDir1 = Console.ReadLine();


        string myPath =  Path.Combine(myDisc , myDir1);
        Console.WriteLine(myPath);
        string[] filePaths = Directory.GetFiles(myPath);


        foreach (var files in filePaths)
        {
            Console.WriteLine(files);
        }
        Console.ReadLine();
    }

你在做什么是创建一个字符串,它是你想要的字符串的字面表示,但你不需要这样做。
例如,如果你这样写:
string path=@"c:\dir\subdir";其实际价值为c:\dir\subdir 而是这个"@\"c:\\dir\\subdir\"";将会 @"c:\dir\subdir"
阅读这些文章以更好地理解字符串文字和逐字字符串https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx
https://msdn.microsoft.com/en-us/library/362314fe.aspx
https://msdn.microsoft.com/en-us/library/h21280bw.aspx