Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2011, 00:07   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
Радость Проверить, можно ли заменить/удалить файл...

Доброго времени суток!

Есть файл, который закачвается на ПК.
Скачаный файл сохраняется с расширением .new
А старый файл нужно заменить новым.

Но перед тем как заменить/удалить нужно проверить, не занят ли он чем-либо.

Вот как я это придумал, пока что:
Код:
          If FileExists(FoundFilesList.Strings[FFLCount] + '.new') then
          begin
            Log('Удаляю старый файл...');
            if DeleteFile(FoundFilesList.Strings[FFLCount]) then
              Log('Старый файл удалён!')
            else
              Log('НЕ удалось укалить старый файл!');

            Log('Переименовываю новый файл в старый...');
            if RenameFile(FoundFilesList.Strings[FFLCount] + '.new',
              FoundFilesList.Strings[FFLCount]) then
              Log('Переимновал успешно...')
            else
              Log('Не удалось переименовать файл...');
          end;
может можно проще?
Человек_Борща вне форума Ответить с цитированием
Старый 02.07.2011, 00:17   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

поверьте, это итак довольно просто
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.07.2011, 00:30   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

т.е. если файл занят то deleteFile или RenameFile вернут false?
Человек_Борща вне форума Ответить с цитированием
Старый 02.07.2011, 00:34   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Есть вероятность, что удалить сможете, а переименовать нет - новый файл теоретически тоже може быть занят.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.07.2011, 00:36   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

да.

ну вообще поидее не совсем если занят, а если не удалось переименновать/удалить(а может доступа нет у вас)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.07.2011, 00:38   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Надежней, но дольше - открыть монопольно старый на запись, новый на чтение и переписать из нового в старый и только после этого новый удалить
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 02.07.2011 в 00:41.
Аватар вне форума Ответить с цитированием
Старый 02.07.2011, 00:42   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну там можно одной строчкой тогда уж и через:
MoveFileEx
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Заменить существующий файл. agregator Microsoft Office Excel 3 08.11.2010 09:37
WinInet загрузить файл во временной файл , использовать, потом удалить Человек_Борща Работа с сетью в Delphi 5 03.08.2010 13:46
Проверить можно ли вписать в прямоугольный треугольник QuadroX Помощь студентам 5 25.09.2009 13:58
Чем можно заменить конструкцию? Или как быть ? kitovras Microsoft Office Excel 3 12.08.2009 15:31
Чем можно заменить объект BitBtn? frai Компоненты Delphi 3 14.04.2007 12:42