:: Visual Foxpro, Foxpro for DOS
Кто занял каталог (файл)???
borman
Автор

Сообщений: 11046
Откуда: Москва
Дата регистрации: 29.07.2004
вот на Интерестный вопросик я выскачил.... Есть функция, которая удаляет каталоги... Начинаю тестить, и что выходит, при попытке удаления занятого каким то приложением каталога\файла - мы имеем приметивный ответ - "Не могу удалить..." - и все!А почему не могу?Кто держит?
Решил доработать ради интереса..... Вот сижу и думаю, в какие степи копать..... да, кстати, уточняю все только под - нтфс должно трудиться.....
Могет кто есть у нас из системщиков?Толкнут в верном напрамку?




------------------
Многие вещи нам непонятны не потому, что наши понятия слабы, а потому, что сии вещи не входят в круг наших понятий.
Ratings: 0 negative/0 positive
Re: Кто занял каталог (файл)???
FoxHunter

Сообщений: 161
Дата регистрации: 29.03.2005
А что ты используешь? Какая функция? API или Фокс?

Если ты используешь RD или RMDIR, то:
Visual FoxPro generates an error message if you attempt to remove a directory or folder that is not empty.
Ratings: 0 negative/0 positive
Re: Кто занял каталог (файл)???
borman
Автор

Сообщений: 11046
Откуда: Москва
Дата регистрации: 29.07.2004
НННеееее, суть в чем, использую я
***********************************************************************************************
* Функция удаления директории
*
* Обращение:
* del_tree(cdir), где
* cdir - директория, котоорую нужно удалить
* При наличиии ощибок (о них выдаются сообщения) функция возвращает .F.,
* при их отсутствии - .T.
* Алексенко Е.Н. 15.01.2003 *
* дополнено Пешковым В.Г. 15.10.2003 г.
***********************************************************************************************
Function del_tree(cdir)
**************************************************************************************
* Проверка входных условий *
**************************************************************************************
If Vartype(cdir)# "C"
Messagebox("Неправильно введен путь !", 0+64+0, "Внимание ...")
Return .F.
Endif
If At("\",cdir) = 0
Messagebox("Неправильно введен путь !", 0+64+0, "Внимание ...")
Return .F.
Endif
If !("\"$ cdir)
Messagebox("Неправильно введен путь !", 0+64+0, "Внимание ...")
Return .F.
Endif
cdir = Upper(Alltrim(cdir))
If Substr(cdir, Len(cdir), Len(cdir)) # "\"
cdir = cdir + "\"
Endif .F.
If !Directory(cdir)
Messagebox("Такой директории не существует !", 0+64+0, "Внимание...")
Return .F.
Endif
**************************************************************************************
* Начальные установки *
**************************************************************************************
cexact = Set("EXACT")
Set Exact Off
Dimension ndir[1]
ndir[1] = ""
**************************************************************************************
* Подготовка курсора NewDir с вложенными директориями, *
* построенных по убыванию длины пути директории *
**************************************************************************************
nkol = searchdir(cdir)
If nkol > 0
Select folder, Len(Alltrim(folder)) As lenfolder ;
FROM dirlist ;
ORDER By lenfolder Desc ;
INTO Cursor newdir
Select newdir
**********************************************************************************
* Сканирование курсора *
* Выборка по тем веткам, где есть пустые поддиректории *
**********************************************************************************
i=0
Scan For Ascan(ndir, Upper(Alltrim(newdir.folder))) = 0
If Adir(atmp, Alltrim(newdir.folder)+"*.*", "AHRS") = 0
If searchdir(Alltrim(newdir.folder)) = 1
Rmdir Alltrim(newdir.folder)
Endif
Else
i=i+1
Declare ndir[i]
ndir[i] = Upper(Alltrim(newdir.folder))
Endif
Endscan
Create Cursor tfile (filepath c(254), filename c(254))
Select "NewDir"
Scan
a = Adir(afile, Alltrim(newdir.folder)+"*.*", "AHRS")
If a > 0
Select "tFile"
For i = 1 To a
Insert Into tfile (filepath, filename) Value (Allt(newdir.folder)+afile[i,1], afile[i,1])
Next
Endif
Endscan
Select "tFile"
Scan
nfile=filepath
Delete File &nfile
Endscan
Select "NewDir"
Scan
tndir=folder
If Directory(tndir)
Rmdir &tndir
Endif
Endscan
Set Alternate Off
Set Alternate To
Use In "NewDir"
Use In "Dirlist"
Use In "tFile"
Endif
Set Exact &cexact
If kol_error>0
Return .F.
Else
Return .T.
Endif
Endfunc
***********************************************************************************************
* PROCEDURE SEARCHDIR *
* Процедура поиска поддиректорий в исходной директории *
***********************************************************************************************
Procedure searchdir
Lparameters cdirname
Create Cursor dirlist(folder c(254))
Select dirlist
cstartdir = Sys(5)+Curdir()
cpath = cdirname
nrecord = 1
Set Default To (cpath)
Append Blank
Replace folder With (cpath)
Adir(adirlist,"","D")
cpathnow = Sys(5)+Curdir()
Go nrecord
bkeepgoing =.T.
Do While bkeepgoing
nrecord = Recno()
cpath = Alltrim(dirlist.folder)
Set Default To "&cPath"
Adir(adirlist,"","D")
cpathnow = Sys(5)+Curdir()
For ncopy = 1 To Alen(adirlist,1)
cfoldername = adirlist[nCopy,1]
If Right(adirlist[nCopy,5],1)="D" And cfoldername # "."
Append Blank
Replace folder With "&cPathNow.&cFolderName.\"
Endif
Endfor
Release adirlist
Go nrecord
bkeepgoing = Iif(nrecord=Reccount(), .F., .T.)
Skip
Enddo
nkolzap=Reccount()
Set Default To "&cStartDir"
If bkeepgoing
cdrivepathfile = "&cPath.&cFileName"
Else
cdrivepathfile = ""
Endif
Return nkolzap
Endproc && searchdir




------------------
Многие вещи нам непонятны не потому, что наши понятия слабы, а потому, что сии вещи не входят в круг наших понятий.
Ratings: 0 negative/0 positive
Re: Кто занял каталог (файл)???
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Hi borman!

Если это объекты на сетевой шаре, то есть штатные средства - начинай поиск от NetFileEnum. Если это объекты в локальной файловой системе - то AFAIK, ничего штатного нету - но есть вроде всякие извращённые способы - например FAR в своём плагине ProcessList как-то умудряется залезть в чужое адресное пространство и показать созданные там хэндлы объектов - в т.ч. и для Directory/File - не знаю можно ли так получить нечто полезное, но вроде в поле имени для хэндла он показывает что-то очень похожее на путь+имя...
Только там написано в мануале что дескать это недокументированные функции и не гарантируется их работа (возможно что нужны админовские или приближённые к тому права...)




------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Кто занял каталог (файл)???
borman
Автор

Сообщений: 11046
Откуда: Москва
Дата регистрации: 29.07.2004
Ндаааа... Понятно, спасиб....
Ребят, и больше ничего?




------------------
Многие вещи нам непонятны не потому, что наши понятия слабы, а потому, что сии вещи не входят в круг наших понятий.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 33 (Гостей: 33)

© 2000-2024 Fox Club 
Яндекс.Метрика