我正在使用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);
}
使用第二块代码是否安全?如果目录已经存在,它似乎没有抛出异常,并且似乎只留下目录的内容。
答案 0 :(得分:4)
IsolatedStorageFile.CreateDirectory
将在内部调用Directory.CreateDirectory
。 Directory.CreateDirectory
个documentation个州:
如果目录已存在,请执行此操作 方法什么都不做。
换句话说,您无需检查该目录是否存在。该方法已经为您做到了。
答案 1 :(得分:1)
我怀疑内部CreateDirectrory
正在检查目录是否已存在或是否吞噬了异常。无论哪种方式,通过事先明确地调用DirectoryExists
可能会带来很小的性能优势。
测试的方法肯定是通过创建大量目录来对两种方法的性能进行基准测试。 (如果您尝试这样做,请注意,父目录中的目录不能超过16k,并且您不能超过18个(我认为)目录。)
最好明确一下你正在做什么。我希望看到代码的任何其他开发人员会在创建目录之前询问您是否在测试存在。特别是如果这个代码被多次调用。如果您测试并发现性能没有差异,我建议在代码中添加注释以说明这一点。