Что нового

В чем отличия _WinAPI_DeleteFile и FileDelete?

Norm

Продвинутый
Сообщения
291
Репутация
76
Кроме вопроса из названия темы есть ещё такие как, например,
_WinAPI_CreateDirectory и DirCreate
_WinAPI_ReadFile
и FileRead
_WinAPI_DeleteFile и FileDelete
Наверняка найдутся ещё и другие "дубликаты", просто я случайно наткнулся на эти.
В чем преимущества одних перед другими?
И где об этом можно по подробней прочесть?
 
Последнее редактирование:
Автор
N

Norm

Продвинутый
Сообщения
291
Репутация
76
Те что начинаются с _WinAPI это функции операционной системы Windows
Это даже из названиая функции понятно :acute:
Мне интересно чем отличается процесс удаления или точнее в чём приимущество(а) этой функции?
 
Последнее редактирование:

Prog

Продвинутый
Сообщения
600
Репутация
77
Функции AutoIt вызывают WinAPI функции. По другому никак. Операционка не даст прямой доступ к диску. Точнее даст, но только с правами админа и так называемый "сырой" доступ где поверхность диска доступна как есть без учета разделов, файловой системы и прочего. И даже в этом случае доступ через WinAPI CreateFile.
В обход операционки приложения доступ не получат, это же не DOS.

в чём приимущество(а) этой функции?
Нет прямых аналогов DirCreate и FileRead в WinAPI, то есть одной функцией их не заменить.
Посмотрите описание ReadFile и FileRead и поймете в чем разница.
 
Автор
N

Norm

Продвинутый
Сообщения
291
Репутация
76
Спасибо за информациыю, но всё равно не понятно где, например, лучше использовать
_WinAPI_DeleteFile если FileDelete тоже прекрасно работает.
Примеров нет, и описание тоже практически отсутствует.
 

Prog

Продвинутый
Сообщения
600
Репутация
77
_WinAPI_DeleteFile если FileDelete тоже прекрасно работает.
Они отличаются. WinAPI DeleteFile удаляет только один файл, а FileDelete из библиотеки AutoIt может удалить несколько файлов и поддерживаются маски.
Читайте описание функций, сравнивайте и поймете в чем отличие.
 
  • Like
Реакции: Norm
Автор
N

Norm

Продвинутый
Сообщения
291
Репутация
76
Последнее редактирование:

Prog

Продвинутый
Сообщения
600
Репутация
77
Norm, WinAPI это функции винды. Они так или иначе присутствуют во всех языках программирования для Windows и AutoIt не исключение. Есть много чего нельзя сделать средствами AutoIt, например открыть файл для чтения и записи. Функция FileOpen не позволяет это сделать. WinAPI CreateFile позволяет. Скажу больше функция FileOpen внутри себя вызывает WinAPI CreateFile, то есть основана на ней.
У AutoIt много других ограничений и приходится использовать WinAPI.
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
открыть файл для чтения и записи
Код:
; удаление файла
FileDelete("RWtest.txt")
; создание файла
FileWrite("RWtest.txt", "string begin" & @CRLF & "string end" & @CRLF)
$s = FileRead("RWtest.txt")
ConsoleWrite("1 ---" & @CRLF & $s)

; открытие файла
$f = FileOpen("RWtest.txt", 1)
; переход в начало
FileSetPos($f, 0, 0)
; чтение первой строки
$s = FileRead($f, 14)
ConsoleWrite("2 ---" & @CRLF & $s)
; перезапись второй строки
FileWrite($f, "rewrite string" & @CRLF)
; чтение всего файла
FileSetPos($f, 0, 0)
$s = FileRead($f)
ConsoleWrite("3 ---" & @CRLF & $s)
; запись в конец файла
FileWrite($f, "final string" & @CRLF)
; чтение открытого файла
$s = FileRead("RWtest.txt")
ConsoleWrite("4 ---" & @CRLF & $s)
; запись в открытый файл
FileWrite("RWtest.txt", "alien string" & @CRLF)
; закрытие файла
FileClose($f)

; чтение конечного файла
$s = FileRead("RWtest.txt")
ConsoleWrite("5 ---" & @CRLF & $s)
 
Последнее редактирование:

Prog

Продвинутый
Сообщения
600
Репутация
77
InnI, значит это в справке ошибка.
$FO_READ (0) = Read mode (default)
$FO_APPEND (1) = Write mode (append to end of file)
$FO_READ открывает файл только для чтения, а $FO_APPEND для чтения и записи что не соответствует документации.
 

InnI

AutoIT Гуру
Сообщения
4,958
Репутация
1,448
иначе бы эту функцию не добавляли бы
UDF WinAPI действительно содержит дубликаты нативных функций AutoIt по работе с файлами. Например, в сборке версий 3.3.8 функция _WinAPI_DeleteFile отсутствовала. Она появилась позднее в результате слияния с UDF WinAPIEx. С другой стороны, в сборке версий 3.3.8 была функция _WinAPI_SetEndOfFile, которая позже получила свой нативный аналог FileSetEnd.

На официальном форуме рекомендуют максимально использовать нативные функции AutoIt и обращаться к WinAPI только в случаях, когда это действительно необходимо.
 
  • Like
Реакции: Norm
Автор
N

Norm

Продвинутый
Сообщения
291
Репутация
76
Ок, наконец то разобрались. Спасибо InnI.
 
Верх