С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Mitradis
1

Удаление папки, если она не существует

21.09.2015, 18:28. Показов 2332. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Если в коде есть к примеру
C#
1
            Directory.Delete(@installedPath + @"\\Data\\dialogueviews", true);
и не дай бог эта папка не существует то приосходит ошибка. Конечно можно сделать так
C#
1
2
3
4
            if (Directory.Exists(installedPath + @"\\Data\\dialogueviews"))
            {
            Directory.Delete(@installedPath + @"\\Data\\dialogueviews", true);
            }
только если таких папок много.Я просто не вижу смысл из-за этого раздувать код, вместо одной строки получается втрое больше. Можно как-то задать, чтоб просто не было ошибки?

И тоже самое с файлами кстати если файла нет а папка есть то тоже ошибка
C#
1
            File.Delete(@installedPath + @"\\Data\\sound\\voice\\processing\\fonixdata.cdf");
странно почему вообще она происходит, на мой взгляд это глупость какаято.

Добавлено через 22 минуты
про файл наоборот: если его и путя до него нет то ошибка.
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2015, 18:28
Ответы с готовыми решениями:

Необходимо имея имя папки проверить существует она или нет
Помогите с проблемой. Необходимо имея имя папки проверить существует она или нет. Используя...

Не создавать запись в БД если она уже существует а просто обновить
Доброго всем дня. Ситуация такая, есть БД MSSQL и php скрипт добавления данных Задача в...

Как при сохранении файла создавать директорию, если она не существует?
Хочу записать файл (SaveToFile) в директорию, предварительно создав эту директорию

Вывести k-ю степень s, если она существует и слово undefined в противном случае.
Пусть имеем строку s и целое число k. Если k - неотрицательно, то k-ой степенью строки s называется...

6
Администратор
Эксперт .NET
17706 / 13833 / 5313
Регистрация: 17.03.2014
Сообщений: 28,343
Записей в блоге: 1
21.09.2015, 18:30 2
Лучший ответ Сообщение было отмечено Mitradis как решение

Решение

Mitradis, кто мешает тебе написать свою функцию для удаления каталога с перехватом исключения?
C#
1
2
3
4
5
void DeleteDirectory(string path)
{
    try { Directory.Delete(path); }
    catch (DirectoryNotFoundException) { }
}
Цитата Сообщение от Mitradis Посмотреть сообщение
Можно как-то задать, чтоб просто не было ошибки?
Нельзя. Изучи как работают исключения в .NET.

Цитата Сообщение от Mitradis Посмотреть сообщение
C#
1
@"\\Data\\sound\\voice\\processing\\fonixdata.cdf"
Слеши не нужно удваивать в @-строках.
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.09.2015, 18:36 3
Лучший ответ Сообщение было отмечено Mitradis как решение

Решение

Цитата Сообщение от Mitradis Посмотреть сообщение
только если таких папок много.Я просто не вижу смысл из-за этого раздувать код, вместо одной строки получается втрое больше. Можно как-то задать, чтоб просто не было ошибки?
в таких случаях принято писать методы:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static class XFile
{
    public static void DeleteAnything(string path)
    {
        var fi = new FileInfo(path);
        if (fi.Exists)
        {
            fi.Delete();
            return;
        }
        var di = new DirectoryInfo(path);
        if (di.Exists)
            di.Delete(true);
    }
}
И после этого в любом месте пишем всего одну строчку:
C#
1
XFile.DeleteAnything(Path.Combine(@installedPath, @"\Data\sound\voice\processing\fonixdata.cdf"));
И да, вряд ли у вас получится сделать путь со слешами, поэтому либо убирайте @, либо двойные слеши, как у меня.
0
OwenGlendower
21.09.2015, 18:38
  #4

Не по теме:

Цитата Сообщение от Psilon Посмотреть сообщение
И да, вряд ли у вас получится сделать путь со слешами, поэтому либо убирайте @, либо двойные слеши, как у меня.
Получится. Я проверял. Винда игнорирует лишние слеши.

0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
21.09.2015, 18:54 5
OwenGlendower, ну, бывает хуже. Например вот я в своё время спрашивал.

C++
1
2
3
4
5
6
7
#include <iostream>
int main(int argc, char **argv)
{
    if (argc > 1)
        std::cout << argv[1] << std::endl;
    return 0;
}
Вопрос - что выведет программа при запуске с такими параметрами? Program.exe "C:\Dir\"
0
Mitradis
22.09.2015, 03:30 6
Psilon, а можно к тому коду который вы скинули прикрутить проверку не занят ли файл другим процессом? Было бы круто.
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
23.09.2015, 10:12 7
Лучший ответ Сообщение было отмечено Mitradis как решение

Решение

что-то вроде такого
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public static bool TryDeleteAnything(string path)
{
    try
    {
        var fi = new FileInfo(path);
        if (fi.Exists)
        {
            fi.Delete();
        }
        else
        {
            var di = new DirectoryInfo(path);
            if (di.Exists)
                di.Delete(true);
        }
        return true;
    }
    catch (IOException exception)
    {
        if (exception.Message.IndexOf("process", StringComparison.OrdinalIgnoreCase) > 0)
            return false;
        throw;
    }
}
0
23.09.2015, 10:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
23.09.2015, 10:12
Помогаю со студенческими работами здесь

Строка: Вывести k-ю степень строки s, если она существует и слово undefined в противном случае.
Пусть имеем строку s и целое число k. Если k - неотрицательно, то k-ой степенью строки s называется...

Создание папки с проверкой если существует то создать с последующей нумирацией
Алгоритм такой, если есть папка нужно создать с добавлениям 1, если нет то создать. Например есть...

Удаление папок, если одноименного файла не существует
Есть каталог, содержащий файлы с расширениями pdf, mobi, azw3 и каталоги с именами, такими же как у...

Удаление поля из таблицы, если оно существует
Доброго времени суток! Мне нужно удалить из таблицы поле (столбец) через запрос SQL в VBA, если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru