系统io文件未找到异常/错误处理

时间:2017-06-07 06:30:46

标签: c#

我在C#工作,我尝试做一个程序,让一些信息在目录中得到一些信息。我做了,但我有错误处理的问题。当程序运行时,例如我只给出随机数列出文件信息,我收到此错误消息:

  

" System.IO.DirectoryNotFoundException:"'找不到路径的一部分' C:\ Temp \ first_project \ first_project \ bin \ Debug \ 12345' 。'"

请有人帮我做错误处理。

提前谢谢。

using System;
    using System.IO;
    class Test
        {
            static void Main(string[] args)
             {
                Console.WriteLine("Please :");
                string hely = Console.ReadLine();
                string[] __file = Directory.GetFiles(hely);
                string[] __dir = Directory.GetDirectories(hely);

                foreach (string i in __file)
                {
                    FileInfo fajl = new FileInfo(i);
                    Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString());
                }
                foreach (string i in __dir)
                {
                    DirectoryInfo _file = new DirectoryInfo(i);
                    Console.WriteLine("{0},{1},{2}", _file.Name, _file.Extension, _file.LastWriteTime.ToString());
                }


            Console.ReadKey();
             }

        }

4 个答案:

答案 0 :(得分:1)

您应该使用

检查路径是否存在
System.IO.Directory.Exists(directory)

的文件
System.IO.File.Exists(filePath)

然后,您需要在for循环中使用try-catch块,以捕获由于权限/权限不足而发生的任何可能的异常。

e.g。

foreach (string i in __file)
{
    try
    {
        FileInfo fajl = new FileInfo(i);
        Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString());
    }
    catch (System.Exception ex)
    {
        System.Console.WriteLine(ex.Message);
        throw;
    }

}

您还可以创建两个try-catch块 - 取决于您想要做什么。

try
{
    foreach (string i in __file)
    {
        try
        {
            FileInfo fajl = new FileInfo(i);
            Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString());
        }
        catch (System.Exception ex)
        {
            System.Console.WriteLine(ex.Message);
            throw;
        }

    }
}
catch (System.Exception exLoop)
{
    System.Console.WriteLine(exLoop.Message);
    throw;
}

请注意,在您的示例中,您应首先检查目录" hely"存在:

if (!System.IO.Directory.Exists(hely))
{
    System.Console.Error.WriteLine("Directory \"{0}\" does not exist.", hely);
    System.Environment.Exit(1);
    // or: return;
}

由于异常处理通常非常慢,但我建议您明确检查文件/目录是否存在。这样做对于文件/目录列表&也是一个好主意。相应用户的读访问权限。但即使你这样做,也要保留try-catch,因为可能存在程序突然失败的情况 - 例如强行移除可移动存储时。

答案 1 :(得分:0)

使用try catch

using System;
    using System.IO;
    class Test
        {
            static void Main(string[] args)
             {
                Console.WriteLine("Please :");
                string hely = Console.ReadLine();

                try
                {
                   string[] __file = Directory.GetFiles(hely);
                   string[] __dir = Directory.GetDirectories(hely);
                   foreach (string i in __file)
                   {
                      FileInfo fajl = new FileInfo(i);
                       Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString());
                   }

                   foreach (string i in __dir)
                   {
                      DirectoryInfo _file = new DirectoryInfo(i);
                      Console.WriteLine("{0},{1},{2}", _file.Name, _file.Extension, _file.LastWriteTime.ToString());
                   }
                }
                catch(System.IO.DirectoryNotFoundException ex)
                {
                    Console.WriteLine("Directory not found");
                }

                Console.ReadKey();
             }

        }

答案 2 :(得分:0)

您可以查看file exists

foreach (string i in __file)
{
    if (File.Exists(i))
    {
        FileInfo fajl = new FileInfo(i);
        Console.WriteLine("{0},{1},{2}", fajl.Name, fajl.Extension, fajl.LastWriteTime.ToString());
    }
}

答案 3 :(得分:0)

RTFM?

阅读Directory.GetFiles method

它表示如果找不到指定的路径,您将获得DirectoryNotfound异常。显然文件夹' C:\ Temp \ first_project \ first_project \ bin \ Debug \ 12345'不存在。

正确的代码是:

string hely = ...
try
{
    string[] files = Directory.GetFiles(hely);
    ProcessFiles(files);
}
catch (DirectoryNotFoundException exc)
{
    Console.WriteLine(exc.Message);
}

如果您不知道如何对例外MSDN about exception handling

做出反应