Форум программистов, компьютерный форум, киберфорум
Delphi
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 1
Регистрация: 07.01.2011
Сообщений: 28

Как отпустить файл, который сам же занял?

13.07.2012, 11:12. Показов 1707. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Извините за такое название, но иначе я буду долго ждать ответа.))

Delphi 7

Пишу прогу, сначала она сканирует директорию(код ниже), потом производит с некоторыми файлами определенные действия, но файл оказывается занят, прога найденая на просторах инета говорит что файл занимает мой проект, после каждого сканирования.
Внимание вопрос:
Как заставить отпустить файл после сканирования

Код Delphi
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 Procedure ScanDir(StartDir: String; Mask:string; List:TStrings);
Var SearchRec : TSearchRec;
Begin
 IF Mask ='' then Mask:= '*.*';
 IF StartDir[Length(StartDir)] <> '\' then StartDir := StartDir + '\';
  IF FindFirst(StartDir+Mask, faAnyFile, SearchRec) = 0 then
   Begin
    Repeat
       { Чтобы выполнение "не подвисало" }
     Application.ProcessMessages;
     IF (SearchRec.Attr and faDirectory) <> faDirectory then
        List.Add(StartDir + SearchRec.Name) else
         IF (SearchRec.Name <> '..') and (SearchRec.Name <> '.') then
       Begin
         List.Add(StartDir + SearchRec.Name + '\');
           { Рекурсивный вызов }
         ScanDir(StartDir + SearchRec.Name + '\',Mask,List);
       End;
    Until FindNext(SearchRec) <> 0;
    FindClose(SearchRec);
  End; {IF}
end;
PS
заодно еще вопрос по той же теме, как проверить что файл занят/не занят

PPS
а все таки сколько будет 2+2*2= 6 или 8?
 Комментарий модератора 
Название темы изменено модератором. Прежнее название: "сколько будет 2+2*2?".
Цитата Сообщение от Catsys Посмотреть сообщение
Извините за такое название, но иначе я буду долго ждать ответа.))
На самом деле скорость ответа от этого не зависит. Особенно сейчас, в сезон каникул и отпусков, когда новых тем появляется не так уж много.


Добавлено через 21 минуту
Можно каким-то другим способом отпустить все файлы занятые этой прогой?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.07.2012, 11:12
Ответы с готовыми решениями:

Файл, который дописывает имя файла, полученное входным параметром, в сам файл N раз, N также входной параметр
Собственно я вроде все правильно написал, но почему он просто не записывает в файл? Даже если я просто что-нибудь напишу по типу echo...

Разработать командный файл, который дописывал бы имя файла, полученного входным параметром в сам файл N количество раз
Разработать командный файл, который дописывал бы имя файла, полученного входным параметром в сам файл N количество раз. N — также задается...

Определение процесса, который занял порт
Как определить какой процесс занял определённый порт. Сначала думал через командную строку netstat и результат распарсить, но может...

4
 Аватар для Tanchik_Z
106 / 79 / 21
Регистрация: 16.04.2012
Сообщений: 215
13.07.2012, 11:13
Цитата Сообщение от Catsys Посмотреть сообщение
заодно еще вопрос по той же теме, как проверить что файл занят/не занят
Если правильно поняла, то вот пример проверки занят ли файл, путь к файлу задаем в Edit "ручками" или нажимаем на "Файл"
Вложения
Тип файла: rar enabled-file.rar (171.7 Кб, 22 просмотров)
0
0 / 0 / 1
Регистрация: 07.01.2011
Сообщений: 28
13.07.2012, 11:26  [ТС]
мм. сорри, это я уже сделал
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TfrmMain.Button3Click(Sender: TObject);
var
  hFile: THandle;
begin
  if OpenDialog1.Execute then
  begin
    Memo1.Clear;
    hFile := CreateFile(Pchar(OpenDialog1.FileName), FILE_SHARE_DELETE, 0, nil, OPEN_EXISTING, 0, 0);
    if hFile = INVALID_HANDLE_VALUE then
      Memo1.Lines.Add('занят"')
    else
    begin
      CloseHandle(hFile);
      Memo1.Lines.Add('свободен"')
    end;
  end;
end;
но все равно спасибо, как бы мне теперь освободить все файлы которые заняла прога, FindClose(SearchRec); походу не срабатывает почемуто
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
13.07.2012, 12:26
Catsys, код из заглавного поста не занимает файлы. Здесь дело в чём-то другом. Возможно, есть другие участки кода в программе, в которых ведётся работа с файлами - вот там может быть проблема.
0
0 / 0 / 1
Регистрация: 07.01.2011
Сообщений: 28
13.07.2012, 12:31  [ТС]
хм, и правда. нашел фрагмент где не закрывается файл после сбора информации
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.07.2012, 12:31
Помогаю со студенческими работами здесь

Копировать не сам ярлык, а файл, на который он указывает
Вопрос в шапке. К примеру, есть папка с кучей ярлыков на документы. Нужно все эти документы скопировать на флешку. Если выделить папку и...

Bat-файл который сам запрашивает права администратора
Есть bat файл,который корректно работает только при запуске его от имени администратора. Нужно сделать так, чтобы bat файл(либо, при...

Как "отпустить" файл после неудачного копирования на FTP?
Добрый день. Проблема такая копирую файлы с помощью idftp.put и когда при копировании канал падает я через пару минут возобновить...

Отпустить созданный файл
Доброго времени суток! Сразу к делу, создаю файл так: File.Create(filePath); После чего, не делаю с файлом никаких манипуляций,...

Вывести таблицу первенства, указав номер места и фамилию бегуна, который его занял
Pascal.Известны результаты трех победителей в соревновании по бегу. Вывести таблицу первенства, указав номер места и фамилию бегуна,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru