Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Catsys
0 / 0 / 1
Регистрация: 07.01.2011
Сообщений: 28
1

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

13.07.2012, 11:12. Просмотров 606. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.07.2012, 11:12
Ответы с готовыми решениями:

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

Отпустить кнопку
Мне нужно сделать вот такую фигню: Если я отпускаю (Не нажимаю!) ( Может через...

Как получить доступ к элементу массива, который сам является элементом массива
Здравствуйте! Использую Delphi 6 Есть такой тип type firstArray = array ...

Обработка клавиш, как сделать так, чтобы зажать клавишу Q выполнялось определенное действие, если отпустить
Обработка клавиш, как сделать так, чтобы зажать клавишу Q выполнялось...

Создать файл, в который будет вводится текст который введен с Edit
помогите пожалуйста с делфи. нужно создать файл в который будет вводится текст...

4
Tanchik_Z
105 / 78 / 21
Регистрация: 16.04.2012
Сообщений: 215
13.07.2012, 11:13 2
Цитата Сообщение от Catsys Посмотреть сообщение
заодно еще вопрос по той же теме, как проверить что файл занят/не занят
Если правильно поняла, то вот пример проверки занят ли файл, путь к файлу задаем в Edit "ручками" или нажимаем на "Файл"
0
Вложения
Тип файла: rar enabled-file.rar (171.7 Кб, 14 просмотров)
Catsys
0 / 0 / 1
Регистрация: 07.01.2011
Сообщений: 28
13.07.2012, 11:26  [ТС] 3
мм. сорри, это я уже сделал
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
12829 / 5737 / 1700
Регистрация: 19.09.2009
Сообщений: 8,807
13.07.2012, 12:26 4
Catsys, код из заглавного поста не занимает файлы. Здесь дело в чём-то другом. Возможно, есть другие участки кода в программе, в которых ведётся работа с файлами - вот там может быть проблема.
0
Catsys
0 / 0 / 1
Регистрация: 07.01.2011
Сообщений: 28
13.07.2012, 12:31  [ТС] 5
хм, и правда. нашел фрагмент где не закрывается файл после сбора информации
0
13.07.2012, 12:31
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.07.2012, 12:31

Как "отпустить" пункт меню?
В проге - меню, в меню - разные пункты, выбираешь пункт - начинает считать....

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

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


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru