Что нового

[Файловая система] Не удаляется удалить каталог с вложениями

forbrock

Новичок
Сообщения
43
Репутация
0
Привет!
Нужно периодически очищать сетевой каталог:

Код:
$files_to_del = 't:\reestr\test\*.*'
If FileExists($files_to_del) Then 
   FileSetAttrib($files_to_del,'-RSHA',1)
   FileDelete($files_to_del)
   MsgBox(0,'@ERROR',@error)
EndIf

Но почему-то ничего не происходит...
Попытался снять атрибуты, без изменений.
DirRemove - тоже ничего.

P.S. Файлы имеют атрибуты R
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Попробовал у себя(изменил только путь), все работает. Сообщение выходит?
 
Автор
F

forbrock

Новичок
Сообщения
43
Репутация
0
Вот и я об этом, странно. Путь верен, также проверял мсжбоксом :smile:
Все сообщения появляются. Но код возврата при удалении 0, как собственно и файлы на месте.


Добавлено:
Сообщение автоматически объединено:

Очень, странно.
Я думал только в сетевых каталогах не удаляет, но нет, на собственном жестком диске тоже не работает. Попробовал на другой машине - тоже самое. Как так?
Версия 3.3.8.1 на моем пк, на втором 3.3.6.1
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Не понимаю твоего @error
Код:
$files_to_del = 't:\reestr\test\*.*'
If FileExists($files_to_del) Then
   FileSetAttrib($files_to_del,'-RSHA',1)
   $Error = FileDelete($files_to_del)
 ;  MsgBox(0,'@ERROR',@error)
    MsgBox(0,'@ERROR',$Error)
EndIf

У меня если файла нет, то 0. Если есть - 1.
 
Автор
F

forbrock

Новичок
Сообщения
43
Репутация
0
Да не в ERROR'e суть.
Файлы не удаляются. Код правильный же.

P.S.
ildar сказал(а):
У меня если файла нет, то 0. Если есть - 1.
Так и должно быть. Если файла нет, то и возврат будет 0
 

ildar

Осваивающий
Сообщения
252
Репутация
30
Я к тому что у меня все работает, и код возвращает 0 или 1. Операционая какая? У меня Win7 x64/
 

AZJIO

Меценат
Меценат
Сообщения
2,892
Репутация
1,196
forbrock
1. В справке сказано, что для удаления нужно снять атрибуты -RST
2. Вы снимаете атрибуты файлов, значит у папок атрибуты не будут сняты.
3. При удалении опять же задана маска для файлов. Будут ли они удалятся включая вложенные в справке не сказано. Попробуй http://autoit-script.ru/index.php/topic,14598.0.html

Пример для теста
Код:
$sPath = @ScriptDir & '\zzz'
$err = DirCreate($sPath)
If $err Then ConsoleWrite('Создана' & @CRLF)

If Not FileSetAttrib($sPath, "+RS") Then ConsoleWrite('Проблема в установке атрибутов' & @CRLF)

ConsoleWrite('Текущие атрибуты: ' & FileGetAttrib($sPath) & @CRLF)

Sleep(3000)
$err = DirRemove($sPath, 0)
If $err Then
	ConsoleWrite('Удалена' & @CRLF)
Else
	ConsoleWrite('Ошибка удаления' & @CRLF)
EndIf



Добавлено:
Сообщение автоматически объединено:

forbrock [?]
Код правильный же
FileExists не работает с маской. FileDelete не возвращает @error
 
Автор
F

forbrock

Новичок
Сообщения
43
Репутация
0
Да, с конкретным каталогом работает:
Код:
$sPath = @ScriptDir & '\zzz'
$err = DirCreate($sPath)
If $err Then ConsoleWrite('Создана' & @CRLF)

If Not FileSetAttrib($sPath, "+RS") Then ConsoleWrite('Проблема в установке атрибутов' & @CRLF)
ConsoleWrite('Текущие атрибуты: ' & FileGetAttrib($sPath) & @CRLF)
FileSetAttrib($sPath, "-RS") 
if Not @error Then
   ConsoleWrite('Атрибуты сняты' & @CRLF)
Else
   ConsoleWrite('Проблема со снятием атрибутов' & @CRLF)
EndIf
   
ConsoleWrite('Текущие атрибуты: ' & FileGetAttrib($sPath) & @CRLF)

Sleep(2000)
$err = DirRemove($sPath, 0)
If $err Then
    ConsoleWrite('Удалена' & @CRLF)
Else
    ConsoleWrite('Ошибка удаления' & @CRLF)
EndIf


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


Добавлено:
Сообщение автоматически объединено:

Теперь все каталоги удаляются:
Код:
$sFolderPath = 'f:\day\reestr\test'		
$aFileList = _FileListToArray($sFolderPath, '*', 0)
If @error Then
   MsgBox(42, 'Ошибка', 'Каталог TEST не найден!')
   Exit
EndIf
For $i = 1 To $aFileList[0]
   FileSetAttrib($sFolderPath & '\' & $aFileList[$i], '-RSH')
   DirRemove($sFolderPath & '\' & $aFileList[$i], 1)
   If Not @error Then ConsoleWrite('Удален: ' & $sFolderPath & '\' & $aFileList[$i] & @CRLF)
Next
 
Верх