【问题标题】:Unexpected results ("System.String[]") printed when trying to find a specific file and extension in a specific folder [duplicate]尝试在特定文件夹中查找特定文件和扩展名时打印意外结果(“System.String []”)[重复]
【发布时间】:2021-08-25 04:42:07
【问题描述】:

我一直在尝试制作一个程序,它会询问您的路径并搜索那里存在的任何文本文件并输出它,但它不起作用

这是我的代码:

            Console.WriteLine("What is the path?");
            string path = Console.ReadLine();
            string[] files = System.IO.Directory.GetFiles(path,"*.txt");
            Console.WriteLine(files);

然而,此代码打印 System.String[] 而不是文件名

【问题讨论】:

    标签: c# file


    【解决方案1】:

    您需要迭代 files 数组。您可以使用foreach 循环打印文件名。

    Console.WriteLine("What is the path?");
    string path = Console.ReadLine();
    string[] files = System.IO.Directory.GetFiles(path, "*.txt");        
    foreach (string file in files)
    {
        Console.WriteLine(file);
    }
    

    如果你只想获取文件名,那么使用 as :

    Console.WriteLine(Path.GetFileName(file));
    

    如果要获取不带扩展名的文件名,则使用 as :

    Console.WriteLine(Path.GetFileNameWithoutExtension(file));
    

    【讨论】:

    • 有什么方法可以只打印文件名而不是文件路径?
    • @TechyShadow,我已经更新了答案
    • 好的,这样只会打印带有扩展名的名称?
    • @TechyShadow,我已经更新了有无扩展的代码
    【解决方案2】:

    如果您查看代码中的这一行

    string[] files = System.IO.Directory.GetFiles(path,"*.txt");
    

    您看到对 GetFiles 的调用返回 System.String[],因此这是输出的原因。

    所以你需要迭代数组并将详细信息输出到控制台。 Foreach 是一种方法。

    foreach(string file in System.IO.Directory.GetFiles(path,"*.txt"))
         Console.WriteLine(file);
    

    我还建议在您的程序中进行一些额外检查,以确保用户输入的输入有效,然后再尝试调用 GetFiles。这将有助于避免出现问题和异常。

    【讨论】:

    • 所以我可以使用 if 语句来确保输入不为空,然后继续其余的?
    • 是的,使用 String.IsNullOrWhiteSpace 检查 null 或空字符串,还使用 ​​System.IO.Directory.Exists 在尝试迭代之前检查目录是否存在,这也将有助于以防万一是访问权限问题。
    猜你喜欢
    • 2011-03-10
    • 2019-07-21
    • 1970-01-01
    • 2014-02-27
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 2013-05-03
    相关资源
    最近更新 更多