Используя IsolatedStorage, нужно ли проверять, существует ли каталог, прежде чем создавать его? - PullRequest
4 голосов
/ 20 сентября 2010

Я работаю над приложением для 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);

        }

Безопасно ли использоватьвторой блок кода?Похоже, он не выдавал исключение, если каталог уже существует, а также оставлял содержимое каталога в покое.

Ответы [ 2 ]

4 голосов
/ 20 сентября 2010

IsolatedStorageFile.CreateDirectory вызовет Directory.CreateDirectory внутри страны.Документация из Directory.CreateDirectory гласит:

Если каталог уже существует, этот метод ничего не делает.

Другими словами, вы неНе нужно проверять, существует ли этот каталог.Метод уже делает это для вас.

1 голос
/ 20 сентября 2010

Я подозреваю, что внутренне CreateDirectrory выполняет проверку, если каталог уже существует или проглатывает исключение. В любом случае, вероятно, небольшого выигрыша в производительности можно получить, вызвав явный вызов DirectoryExists.

Чтобы проверить наверняка, можно сравнить производительность двух методов с созданием большого количества каталогов. (Если вы попробуете это, помните, что вы не можете иметь более 16 тыс. Каталогов в родительском каталоге и не можете углубляться более чем в 18 (я думаю) каталогов.)

Лучше попрактиковаться в том, что вы делаете. Я надеюсь, что любой другой разработчик, который посмотрел на код, спросил бы вас, что вы не проверяли существование до создания каталога. Особенно, если этот код вызывался много раз. Если вы тестируете и не обнаруживает никакой разницы в производительности, я бы порекомендовал комментарий в коде, чтобы указать это.

...