在C#中循环文件文件夹的最简单方法是什么?

时间:2010-06-08 14:44:38

标签: c# parsing file-io filesystems

我尝试编写一个程序,使用包含相关文件路径的配置文件来导航本地文件系统。我的问题是:在执行文件I / O时(这将是从桌面应用程序到服务器并返回)和C#中的文件系统导航时使用的最佳实践是什么?

我知道如何谷歌,我找到了几个解决方案,但我想知道哪些功能最强大和灵活。同样,如果有人对C#文件I / O的异常处理有任何提示,这也会非常有帮助。

4 个答案:

答案 0 :(得分:8)

您不需要单独的库,请使用System.IO命名空间中的类,例如FileFileInfoDirectoryDirectoryInfo。一个简单的例子:

var d = new DirectoryInfo(@"c:\");
foreach(FileInfo fi in d.GetFiles())
    Console.WriteLine(fi.Name);

答案 1 :(得分:3)

你在谈论各种各样的图书馆?

我非常坚持System.IO.Directory等等。它拥有您需要的一切。

类似的东西:

foreach (var file in System.IO.Directory.GetFiles(@"C:\Yourpath"))
{
    // Do ya thang.
}

答案 2 :(得分:2)

您可以在System.IO命名空间中使用各种类,包括FileFileInfoDirectoryDirectoryInfo

至于实践......与任何IO一样,请确保关闭所打开的任何流。您还可能需要使用Disposable对象,因此请查看using关键字。

答案 3 :(得分:2)

你只需要{p> System.IO:)

关于异常处理。除非我们期待例外,否则我们永远不应该抓住它。真正意想不到的例外应该没有得到解决。 [看起来有罪]好的,唯一的例外是最高级别,而用于报告目的,例如

// assuming console program, but every application Console, WinForm,
// Wpf, WindowsService, WebService, WcfService has a similar entry point
class Program
{
    // assume log4net logging here, but could as easily be
    // Console.WriteLine, or hand rolled logger
    private static readonly ILog _log = LogManager.GetLogger (typeof (Program));

    static void Main (string[] args)
    {
        AppDomain.CurrentDomain.UnhandledException += 
            CurrentDomain_UnhandledException;
    }

    private static void CurrentDomain_UnhandledException (
        object sender, 
        UnhandledExceptionEventArgs e)
    {
        _log.
            Fatal (
            string.Format (
            "Unhandled exception caught by " +
            "'CurrentDomain_UnhandledException'. Terminating program.", 
            e.ExceptionObject);
    }

}

如果您预计会有例外情况,则可接受以下其中一项

// example of first option. this applies ONLY when there is a
// well-defined negative path or recovery scenario
public void SomeFunction ()
{
    try
    {
        string allText = System.IO.File.ReadAllText ();
    }

    // catch ONLY those exceptions you expect
    catch (System.ArgumentException e)
    {
        // ALWAYS log an error, expected or otherwise.
        _log.Warn ("Argument exception in SomeFunction", e);

        // if the use-case\control flow is recoverable, invoke
        // recovery logic, preferably out of try-catch scope
    }
}

// example of second option. this applies ONLY when there is no
// well defined negative path and we require additional information
// on failure
public void SomeFunction ()
{
    try
    {
        string allText = System.IO.File.ReadAllText ();
    }

    // catch ONLY those exceptions you expect
    catch (System.ArgumentException innerException)
    {
         // do whatever you need to do to identify this
         // problem area and provide additional context
         // like parameters or what have you. ALWAYS
         // provide inner exception
         throw new SomeCustomException (
             "some new message with extra info.",
             maybeSomeAdditionalContext,
             innerException);

         // no requirement to log, assume caller will
         // handle appropriately
    }
}