Что нового

FileDelete(): коды возврата

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Подскажите, пожалуйста, логично ли то, что функция FileDelete() возвращает ошибку в случае отсутствия удаляемого файла?

Я рассуждаю так: я должен обеспечить отсутствие некоторого файла на диске, я вызываю функцию, но она возвращает ошибку не только в случае невозможности удаления файла, но и в случае, когда файл (уже) отсутствует на диске...

Единственное, что в этой ситуации логично, это проверка наличия файла перед его удалением... Но почему бы включить ее в функцию, а может быть выделить специальный (к примеру, 2) код возврата на случай отсутствия файла на диске?
 

SyDr

Сидра
Сообщения
651
Репутация
158
Файл не может быть удалён, если
1) Стоит атрибут только чтение
2) Недостаточно прав для удаления
3) Файл занят другой программой

Во всех остальных случаях 0 означает, что файл не существует на момент удаления.
Если тебе нужно обеспечить отсутствие некоторого файла на диске - тебе надо проверить все три пункта перед удалением.

Хотя дполнительное значение @error было бы неплохо получать.
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
SyDr
Файл не может быть удалён, если
1) Стоит атрибут только чтение
2) Недостаточно прав для удаления
3) Файл занят другой программой
4) Файл не существует
Логично, что нельзя удалить несуществующий файл...
Но цель удаления не в самом процессе удаления, а в отсутствии файла...
Вот я и подумал: Есть ли смысл запросить у разработчиков разделения кода возврата 0 на два: невозможность удаления (0) и файл отстутствует (2)?
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
[quote author=AutoIt issue tracker]Don't assume that just because you need a feature that the majority of people will use the feature. In other words don't ask for very niche things. This is doubly true if you can do what you need via a UDF. Things added to the language are intentionally very broad to reduce bloat.[/quote]

Вообщем смысл в том, что не стоит просить у разработчиков что-то, что вы можете реализовать своими силами для решения собственных задач, дабы не усложнять код AutoIt.

Код:
#Include <WinAPI.au3>

If Not FileDelete('...') Then
	$Error = _WinAPI_GetLastError()
	Switch $Error
		Case 5 ; Нет доступа к файлу (файл существует)
			...
		Case 6 ; Файл не существует
			...
		Case Else
			...
	EndSwitch
EndIf
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Yashied
То есть, проверка существования файла возложена на скриптера?
Я могу сделать так:
Код:
$ADDR="disk:\folder\file"
 If FileExists($ADDR) Then FileDelete($ADDR)

Но мне показалось это нелогичным...
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
snoitaleR
А, по-моему, очень даже логично! Каждая функция выполняет свою задачу!
 
Автор
snoitaleR

snoitaleR

AutoIT Гуру
Сообщения
855
Репутация
223
Видимо, мне показалось, что дополнительный код возврата будет полезным...
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
snoitaleR сказал(а):
Видимо, мне показалось, что дополнительный код возврата будет полезным...
Возможно, разработчики это сделали для того, чтобы избежать лишнего вызова функции проверки, или еще для чего-нибудь.
 
Верх