4

我正在开发一个 Windows Phone 7 应用程序,我想知道是否有人对我是否必须在创建目录之前检查目录是否存在有明确的答案,以及这样做/不这样做的优点/缺点是什么. 据我所知,通过单步执行我的代码,以下两个代码块以相同的方式工作:

        using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {                
            //ensure directory exists
            String sDirectory = System.IO.Path.GetDirectoryName(sPath);
            if (!appStorage.DirectoryExists(sDirectory))
            {
                appStorage.CreateDirectory(sDirectory);
            }
        }

        using (IsolatedStorageFile appStorage = IsolatedStorageFile.GetUserStoreForApplication())
        {                
            //ensure directory exists
            String sDirectory = System.IO.Path.GetDirectoryName(sPath);
            appStorage.CreateDirectory(sDirectory);

        }

使用第二个代码块安全吗?如果目录已经存在,它似乎没有抛出异常,并且似乎也单独留下了目录的内容。

4

2 回答 2

4

将在内部IsolatedStorageFile.CreateDirectory调用Directory.CreateDirectory。国家的文件Directory.CreateDirectory

如果目录已存在,则此方法不执行任何操作。

换句话说,您不需要检查该目录是否存在。该方法已经为您做到了。

于 2010-09-20T12:31:28.837 回答
1

我怀疑内部CreateDirectrory正在检查目录是否已经存在或正在吞噬异常。无论哪种方式,事先显式调用都可能对性能有一点好处DirectoryExists

确定测试的方法是通过创建大量目录来对这两种方法的性能进行基准测试。(如果您尝试此操作,请注意父目录中的目录不能超过 16k,并且目录深度不能超过 18(我认为)。)

最好明确说明你在做什么。我希望任何其他查看代码的开发人员都会问您在创建目录之前您没有测试是否存在。特别是如果多次调用此代码。如果您测试并发现性能没有差异,我建议在代码中添加注释来说明这一点。

于 2010-09-20T12:31:38.207 回答