我在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();
}
}
答案 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?
它表示如果找不到指定的路径,您将获得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
做出反应