AutoIt/Operacje na plikach

Otwierania i zamykanie plików

edytuj

Pierwszą ważną funkcją jest FileOpen, powoduje ona otwarcie pliku tekstowego. Otwarcie pliku jest konieczne aby można było czytać z pliku lub do niego zapisywać.

FileOpen

edytuj
FileOpen ( "nazwa_pliku" [, mode ] )

Funkcja zwraca uchwyt do pliku lub -1 gdy otwarcie pliku nie powiodło się.

Uchwyt jest to liczbowy identyfikator, którego możemy używać zamiast nazwy pliku (łącznie ze ścieżką dostępu). Operowanie uchwytami jest o wiele szybsze niż nazwami plików.

Funkcja ta ma dwa parametry:

"nazwa_pliku" - nazwa otwieranego pliku, może być ze ścieżką dostępu

Drugi parametr jest opcjonalny tzn. że może być pominięty jeżeli odpowiada nam jego wartość domyślna:

mode - określa sposób otwarcia pliku

0 - otwiera plik tylko do odczytu, jeżeli plik nie istnieje nie jest tworzony (wartość domyślna)

1 - otwiera plik do zapisu, dopisywanie na końcu pliku, jeżeli plik nie istnieje jest tworzony

2 - usuwa poprzednią zawartość pliku i otwiera go do zapisu, jeżeli plik nie istnieje jest tworzony

4 - odczytuje plik w trybie RAW (odczyt i zapis)

Dodanie wartości 8 spowoduje utworzenie struktury folderów, o ile te nie istnieją.

Przykład:

$hFile = FileOpen("C:\Windows\tymczasowy\Test.txt",9) ;1+8 otwiera plik do zapisu
                       ;jeżeli nie istnieje zostanie utworzony wraz z katalogiem


Kolejną funkcją jest:

FileClose

edytuj
FileClose (uchwyt)

Zamyka ona uprzednio otwarty plik. Jedynym jej parametrem jest uchwyt do pliku, odczytany funkcją FileOpen.

Funkcja zwraca 1 gdy operacja zakończyła się sukcesem, lub 0 gdy wystąpił błąd.

Przykład:

$hFile = FileOpen("C:\Windows\tymczasowy\Test.txt",9)
FileClose($hFile)

Zamykanie plików jest bardzo ważne, pozwala oszczędzić trochę pamięć komputera.


Zapis do plików

edytuj

Pierwszą funkcją która zapisuje dane do pliku jest:

FileWrite

edytuj
FileWrite ( uchwyt|"nazwa_pliku", dane )

Funkcja dopisuje dane na końcu pliku. Zwraca 1 gdy sukces lub 0 gdy wystąpił błąd.

Parametry:

uchwyt|"nazwa_pliku" - uchwyt do pliku lub jego nazwa

dane - dopisywane dane (tekstowe lub binarne)

Przykład:

$hFile = FileOpen("Test.txt",1)
FileWrite($hFile, "Jakiś tekst")
FileClose($hFile)

Po uruchomieniu tego skryptu w katalogu roboczym zostanie utworzony plik Test.txt (jeżeli nie istnieje), zaś w nim tekst "Jakiś tekst". Oczywiście zamiast nazwy pliku można podać pełną ścieżkę, wtedy plik zostanie utworzony w opisanej tą ścieżką lokacji.

Istnieje pewna istotna różnica między użyciem uchwytu, a użyciem nazwy pliku. Uchwytu można użyć tylko gdy plik został uprzednio otwarty, natomiast podanie nazwy pliku powoduje automatyczne otwarcie pliku, a po zakończeniu zapisu jego zamknięcie. Wydawało by się, że druga metoda jest prostsza, ale nie zawsze jest optymalna (patrz poniższy przykład).

FileWrite zapisuje dane ciągiem, aby zaznaczyć koniec linii musimy dopisać @CRLF.

FileWrite("Test.txt", "Jakiś tekst")
FileWrite("Test.txt", @CRLF)           ; Koniec linii
FileWrite("Test.txt", "Jakiś tekst 2")	;już w nowej linii

lub z użyciem uchwytów:

$hFile = FileOpen("Test.txt",2)
FileWrite($hFile, "Jakiś tekst")
FileWrite($hFile, @CRLF) ; Koniec linii
FileWrite($hFile, "Jakiś tekst 2")	;już w nowej linii
FileClose($hFile)

W pierwszym przykładzie plik będzie otwierany i zamykany 3 razy, w drugim tylko raz. Użycie uchwytu wprawdzie wydłużyło skrypt o 2 linie, ale skróciło czas jego wykonywania.

Ma to szczególnie znaczenie przy skomplikowanej edycji dużych plików tekstowych.


Drugą funkcją zapisującą dane do pliku jest FileWriteLine. Ta funkcja różni się od poprzedniej tym, że zawsze dopisuje dane od nowej linii, oraz że nie stosuje się jej do plików binarnych:

FileWriteLine

edytuj
FileWriteLine ( uchwyt|"nazwa_pliku", "linia" )

Dodaje linię tekstu na końcu wcześniej otwartego pliku tekstowego.

Parametry:

uchwyt|"nazwa_pliku" - uchwyt do pliku lub jego nazwa,

"linia" - Wiersz tekstu do zapisania w pliku tekstowym. Jeśli linia NIE kończy się na @CR lub @LF, to automatycznie zostanie dodane @CRLF.

Przykład:

FileWriteLine("Test.txt", "Jakiś tekst")
FileWriteLine("Test.txt", "Jakiś tekst 2")


Funkcje FileWrite i FileWriteLine nie zapisują danych bezpośrednio na fizycznym dysku, lecz operacje tą wykonują w buforze pamięci operacyjnej. Rzeczywisty zapis odbywa się dopiero w momencie zamknięcia pliku. Jeżeli jednak po zapisaniu pliku chcemy go odczytać bez zamykania, musimy bufor zrzucić na fizyczny dysk. Służy do tego funkcja:

FileFlush

edytuj
FileFlush ( "uchwyt" )

Funkcja zwraca True gdy bufor został zrzucony na dysk, lub 0 gdy wystąpił błąd.

uchwyt - uchwyt do pliku


Czytanie z plików

edytuj

FileRead

edytuj
FileRead ( uchwyt|"nazwa_pliku" [, count] )

Funkcja zwraca wczytane dane tekstowe lub binarne. Opcjonalny parametr count określa ile znaków (bajtów) ma być wczytane.

Przykład:

MsgBox(0, "Test", FileRead("Test.txt",5)) ;zostanie odczytanych pierwszych 5 znaków


Drugie polecenie służy do odczytania z pliku tekstowego wybranej linii tekstu:

FileReadLine

edytuj
FileReadLine ( uchwyt|"nazwa_pliku" [, nr_linii] )

nr_linii - numer wczytywanej linii tekstu, wartość domyślna to 1, -1 oznacza ostatnią linię

Przykład:

MsgBox(0, "Test", FileReadLine("Test.txt",2))  ;zostanie wczytany drugi wiersz tekstu


FileReadToArray

edytuj
FileReadToArray ( uchwyt|"nazwa_pliku" )

Funkcja odczytuje plik tekstowy i zapisuje go do jednowymiarowej tablicy. Wiersze pliku są zapisywane w kolejnych komórkach tablicy, która jest zwracana przez funkcję. Jeżeli wystąpił błąd ustawiana jest wartość makra @error (1 - błąd otwierania pliku, 2 - plik jest pusty).

Przykład:

;wczytanie do tablicy pliku zawierającego wykonywany skrypt
$aArray = FileReadToArray(@ScriptFullPath)

If @error Then
   MsgBox(0, "", "Wystąpił błąd. @error: " & @error)
Else
   For $i = 0 To UBound($aArray) - 1 ; Loop through the array.
      MsgBox(0, "Wiersz: " & $i+1, $aArray[$i])
   Next
EndIf


Wskaźnik pozycji w pliku

edytuj

Zapis i czytanie danych z pliku rozpoczyna się od pozycji wskaźnika. Funkcja FileOpen ustawia wskaźnik na początku pliku, a FileReadLine na jego końcu.

Jest jednak możliwość przeniesienia wskaźnika w dowolne miejsce pliku. Dzięki temu operacje zapisu i odczytu mogą się rozpoczynać w dowolnym miejscu pliku, a nie tylko standardowo od początku lub na końcu. Służy do tego funkcja:


FileSetPos

edytuj
FileSetPos ( uchwyt, offset, start )

Funkcja zwraca True gdy sukces, lub 0 gdy wystąpił błąd.

uchwyt - uchwyt do pliku

offset - przesunięcie względem pozycji startowej w kierunku końca pliku (może być także liczbą ujemną dla start 1 lub 2, wartość ujemna oznacza przesunięcie w kierunku początku pliku)

start - pozycja startowa:

0 - początek pliku

1 - aktualna pozycja wskaźnika

2 - koniec pliku


Aby poznać aktualną pozycję wskaźnika należy użyć funkcji:

FileGetPos

edytuj
FileGetPos ( uchwyt )

Funkcja zwraca pozycję wskaźnika, jeżeli wystąpi błąd to zwraca 0 i makro @error przyjmuje wartość 1.

uchwyt - uchwyt do pliku

UWAGA: Ponieważ indeksy pozycji rozpoczynają się od 0 (wskaźnik na początku pliku), to zwrócona wartość równa 0 oznacza błąd tylko w przypadku gdy jednocześnie makro @error jest różne od zera.

Przykład:

$sFile = "test.txt"
;utworzenie pliku testowego
$hFile = FileOpen($sFile, 2)

;obsługa ewentualnych błędów
If $hFile = -1 Then
	MsgBox(0, "Błąd:", "Nie można otworzyć pliku.")
	Exit
EndIf

;zapis wierszy w pliku testowym
FileWriteLine($hFile, "Wiersz 1")
FileWriteLine($hFile, "Wiersz 2")
FileWriteLine($hFile, "Wiersz 3")

;zrzucenie bufora pliku na dysk
FileFlush($hFile)

;odczytanie aktualnej pozycji i odczyt danych rozpoczynając od niej
MsgBox(0, "", "Pozycja: " & FileGetPos($hFile) & @CRLF & "Dane: " & @CRLF & FileRead($hFile))

;ustawienie wskaźnika na początku pliku
FileSetPos($hFile, 0, 0)
MsgBox(0, "", "Pozycja: " & FileGetPos($hFile) & @CRLF & "Dane: " & @CRLF & FileRead($hFile))

;ustawienie wskaźnika na 10 pozycji
FileSetPos($hFile, 10, 0)

;zapis wiersza od ustalonej pozycji
FileWriteLine($hFile, "%%%")
FileFlush($hFile)

FileSetPos($hFile, 0, 0)

MsgBox(0, "", "Pozycja: " & FileGetPos($hFile) & @CRLF & "Dane: " & @CRLF & FileRead($hFile))

;zamknięcie pliku
FileClose($hFile)

;usunięcie pliku testowego
FileDelete($sFile)

FileSetEnd

edytuj
FileSetEnd ( uchwyt )

Funkcja ustawia koniec pliku na bieżącym położeniu wskaźnika. Zwraca True gdy sukces, lub False gdy wystąpił błąd.

uchwyt - uchwyt do pliku


Szukanie plików / folderów

edytuj

FileFindFirstFile

edytuj
FileFindFirstFile ( "nazwa_pliku" )

Funkcja zwraca uchwyt dla funkcji FileFindNextFile, lub -1 gdy nie znaleziono pliku / folderu (makro @error przyjmuje wartość 1).

"nazwa_pliku" - nazwa poszukiwanego pliku (plików), wielkość liter jest ignorowana. Akceptowane są symbole wieloznaczne (wildcards) * i ?, można użyć tylko jednego symbolu wieloznacznego w części pliku lub w części rozszerzenie np.: *. b?.


FileFindNextFile

edytuj
FileFindNextFile ( search )

Funkcja zwraca kolejne nazwy plików spełniających warunki określone w FileFindFirstFile. Makro @extended przyjmuje wartość 1 gdy nazwa jest nazwą folderu, a nie pliku.

Jeżeli nie ma już plików / folderów o nazwach spełniających określone warunki, makro @error przyjmuje wartość 1.

serch - uchwyt zwracany przez funkcję FileFindFirstFile.

UWAGA: Po zakończeni przeszukiwania należy wywołać funkcji FileClose() celem zwolnienia uchwytu.

Przykład:

$sMask = @WindowsDir&"/*.bmp" ;pliki z rozszerzeniem BMP w katalogu windows
$hSearch = FileFindFirstFile($sMask)
If $hSearch = -1 Then
   MsgBox(0, $sMask, "Brak plików!")
   Exit
EndIf

Do
   $hFile = FileFindNextFile($hSearch)
   If @error Then
     MsgBox(0, "Znalezione pliki:", "Nie ma więcej plików", 3)
      Exit
   EndIf
   Until MsgBox(1, "Znalezione pliki:", $hFile)=2
FileClose($hSearch)


FileExists

edytuj
FileExists ( "path" )

Funkcja sprawdza czy istnieje dany plik lub folder. Jeżeli tak to zwraca 1, w przeciwnym razie 0.

"path" - ścieżka pliku lub folderu

Przykład:

MsgBox(0, "Test", FileExists("c:\windows\")) ;czy istnieje folder
MsgBox(0, "Test", FileExists("test.txt"))    ;czy istnieje plik, sprawdzanie w folderze bieżącym


Usuwanie pliku (plików)

edytuj

FileDelete

edytuj
FileDelete ( "path" )

Funkcja zwraca 1 gdy sukces, 0 gdy wystąpił błąd lub plik (folder) nie istnieje.

"path" - nazwa i ścieżka dostępu pliku do usunięcia (można stosować wieloznaczniki "*" i "?" (ang. Wildcards))

Przykład:

MsgBox(0, "Test", FileDelete("*.tmp"))


FileRecycle

edytuj
FileRecycle ( "źródło" )

Funkcja przenosi plik lub folder do kosza systemowego. Zwraca 1 gdy sukces, 0 gdy wystąpił błąd lub plik (folder) nie istnieje.

"źródło" - nazwa i ścieżka dostępu pliku źródłowego (można stosować wieloznaczniki "*" i "?" (ang. Wildcards))

Przykład:

MsgBox(0, "Test", FileRecycle("test.txt"))


FileRecycleEmpty

edytuj
FileRecycleEmpty ( ["źródło"] )

Funkcja powoduje opróżnienie kosza systemowego (trwale usuwa z niego wszystkie pliki). Zwraca 1 gdy sukces, lub 0 gdy kosz nie może zostać opróżniony.

"źródło" - parametr opcjonalny określający, z którego dysku kosz ma być opróżniony (pominięcie parametru powoduje opróżnienie koszy na wszystkich dyskach)

UWAGA: - Aby funkcja działała konieczny jest IE przynajmniej w wersji 4.

Przykład:

FileRecycleEmpty("C:\")


Kopiowanie i przenoszenie wskazanego pliku (plików)

edytuj

FileCopy

edytuj
FileCopy ( "źródło", "cel" [, flag] )

Funkcja kopije wskazany plik (pliki). Zwraca 1 gdy sukces, 0 gdy wystąpił błąd.

Parametry:

"źródło" - nazwa i ścieżka dostępu pliku źródłowego (można stosować wieloznaczniki "*" i "?" (ang. Wildcards))

"cel" - ścieżka docelowa kopiowanych plików

Parametr opcjonalny:

flag - określa sposób zapisu pliku docelowego

0 - istniejące pliki nie są nadpisywane (domyślne)

1 - pliki są nadpisywane

Dodanie wartości 8 spowoduje utworzenie struktury folderów, o ile te nie istnieją.

Przykład (skopiowanie wszystkich plików z rozszerzeniem txt z folderu "old" na dysku C, do folderu "new" na dysku D):

FileCopy("c:\old\*.txt", "d:\new\")


FileMove

edytuj
FileMove ( "źródło", "cel" [, flag] )

Funkcja przenosi wskazany plik (pliki). Zwraca 1 gdy sukces, 0 gdy wystąpił błąd.

Parametry:

"źródło" - nazwa i ścieżka dostępu pliku źródłowego (można stosować wieloznaczniki "*" i "?" (ang. Wildcards))

"cel" - ścieżka docelowa kopiowanych plików

Parametr opcjonalny:

flag - określa sposób zapisu pliku docelowego

0 - istniejące pliki nie są nadpisywane (domyślne)

1 - pliki są nadpisywane

Dodanie wartości 8 spowoduje utworzenie struktury folderów, o ile te nie istnieją.

Przykład (skopiowanie wszystkich plików z rozszerzeniem txt z folderu "old" na dysku C, do folderu "new" na dysku D):

FileMove("c:\old\*.txt", "d:\new\")


Ustawienie katalogu bieżącego

edytuj

FileChangeDir

edytuj
FileChangeDir ( "path" )

"path" - ścieżka do folderu, który ma być ustawiony jako bieżący.

Dzięki temu nie będziemy musieli podawać pełnej ścieżki, gdyż pliki będą szukane w folderze bieżącym.

Funkcja zwraca 1 gdy sukces, lub 0 gdy nie znaleziono podanego folderu.

Przykład (ustawienie jako domyślny folder systemowy Windows (ścieżka do tego folderu jest zwracana przez makro @WindowsDir)):

FileChangeDir(@WindowsDir)


Atrybuty plików i folderów

edytuj

FileGetAttrib

edytuj
FileGetAttrib ( "nazwa_pliku" )

Funkcja zwraca string z opisem atrybutów pliku (folderu), lub pusty string gdy wystąpi błąd (makro @error ustawione na 1).

"nazwa_pliku" - nazwa pliku lub folderu

Zwracany string może składać się z następujących znaków, (np. "RASH"):

"R" = tylko do odczytu

"A" = archiwalny

"S" = systemowy

"H" = ukryty

"N" = normalny

"D" = folder

"O" = offline

"C" = skompresowany (kompresja NTFS, nie ZIP)

"T" = tymczasowy

MsgBox(0, "FileGetAttrib:", @WindowsDir & "\explorer.exe" & @LF _
		 & FileGetAttrib (@WindowsDir & "\explorer.exe"))


FileSetAttrib

edytuj
FileSetAttrib ( "wzorzec_plik", "+-RASHNOT" [, rekurencja] )

Funkcja ustawia atrybuty plików. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"wzorzec_pliku" - wzorzec plików do zmiany atrybutów, np.: C:\*.au3, C:\Dir itp.

"+-RASHNOT" - string z opisem zmienianych atrybutów, znak + oznacza ustawienie atrybutów, - usunięcie. Może być kombinacją następujących znaków:

"R" = tylko do odczytu

"A" = archiwalny

"S" = systemowy

"H" = ukryty

"N" = normalny

"O" = offline

"T" = tymczasowy

rekurencja - (opcjonalnie) 0 - brak rekurencji (wartość domyślna), 1 - rekurencja. Włączenie rekurencji powoduje, że działanie funkcji obejmuje także pliki w podkatalogach.

Przykład (usunięcie atrybutu "tylko do odczytu" i nadanie "archiwalny" dla wszystkich plików o rozszerzeniu bmp, w katalogu głównym dysku D i wszystkich podkatalogach):

FileSetAttrib("D:\*.bmp", "-R+A", 1)


Informacje i dowiązania plików

edytuj

FileGetSize

edytuj
FileGetSize ( "nazwa_pliku" )

Funkcja zwraca wielkość pliku w bajtach, lub 0 gdy wystąpił błąd.

Przykład:

MsgBox(0,"Test",FileGetSize("Explorer.exe"))


FileGetVersion

edytuj
FileGetVersion ( "nazwa_pliku" [,"nazwa_pola"] )

Funkcja zwraca informacje o wersji pliku, lub string "0.0.0.0" gdy nie ma danych o wersji pliku, lub pusty string "" gdy wystąpił błąd (ustawiane jest makro @error).

"nazwa_pliku" - nazwa pliku

"nazwa_pola" - (opcjonalnie) nazwa pola, które ma być pobierane z nagłówka informacyjnego wersji plik, np.: Comments, InternalName,Comments, InternalName, ProductName, CompanyName, LegalCopyright, ProductVersion, FileDescription, LegalTrademarks, PrivateBuild, FileVersion, OriginalFilename, SpecialBuild, CompanyName, LegalCopyright, ProductVersion, FileDescription, LegalTrademarks, PrivateBuild, FileVersion, OriginalFilename, SpecialBuild.

Przykład:

MsgBox(0, "Test", "Wersja: "&FileGetVersion("Explorer.exe") & @LF & _
          "Program: " & FileGetVersion("Explorer.exe", "InternalName") & @LF & _
          "Produkt: " & FileGetVersion("Explorer.exe", "ProductName") & @LF & _
          "Producent: " & FileGetVersion("Explorer.exe", "CompanyName"))


FileGetTime

edytuj
FileGetTime ( "nazwa_pliku" [, opcja [, format]] )

Funkcja zwraca dane o czasie korzystania z pliku w formie tablicy lub stringu. Jeżeli wystąpił błąd to zwraca 0, a makro @error przyjmuje wartość 1.

"nazwa_pliku" - nazwa pliku

opcja - określa jakie informacje o czasie pliku mają być zwrócone:

0 - ostatnia modyfikacja
1 - utworzenie
2 - ostatnie użycie

format - opcjonalnie, określa w jakim formacie mają być zwracane informacje:

0 - (domyślnie) jako tablica o następującej budowie:

[0] = rok (jako liczba)
[1] = miesiąc (01 do 12)
[2] = dzień (01 - 31)
[3] = godzina (00 - 23)
[4] = minuta (00 - 59)
[5] = sekunda (00 - 59)

1 - jako string o formacie "YYYYMMDDHHMMSS"

Przykład:

$t1 = FileGetTime(@WindowsDir & "\WindowsUpdate.log", 0)
$t2 = FileGetTime(@WindowsDir & "\WindowsUpdate.log", 1)
$t3 = FileGetTime(@WindowsDir & "\WindowsUpdate.log", 2)
$tm = $t1[0] & "/" & $t1[1] & "/" & $t1[2]
$tc = $t2[0] & "/" & $t2[1] & "/" & $t2[2]
$ta = $t3[0] & "/" & $t3[1] & "/" & $t3[2]
MsgBox(0, "WindowsUpdate.log:", "Modyfikacja: " & $tm & @LF & _
                                "Utworzenie: " & $tc & @LF & _
                                "Użycie: " & $tm )


FileSetTime

edytuj
FileSetTime ( "wzorzec_pliku", "czas" [, typ [, rekurencja]] )

Funkcja ustawia informacje o czasie używania pliku, zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"wzorzec_pliku" - wzorzec plików do zmiany atrybutów, np.: C:\*.au3, C:\Dir itp.

"czas" - string z danymi o ustawianym czasie, w formacie "YYYYMMDDHHMMSS"

typ - (opcjonalnie) rodzaj ustawianego czasu:

0 - ostatnia modyfikacja (domyślnie)
1 - utworzenie
2 - ostatnie użycie

rekurencja - (opcjonalnie) 0 - brak rekurencji (wartość domyślna), 1 - rekurencja. Włączenie rekurencji powoduje, że działanie funkcji obejmuje także pliki w podkatalogach.

Przykład:

FileSetTime("D:\*.bmp", "20120702172700", 2)


FileGetEncoding

edytuj
FileGetEncoding ( "uchwyt/nazwa_pliku" [, opcja = 1] )

Funkcja zwraca typ kodowania tekstu używany w pliku, lub -1 gdy wystąpił błąd.

  0 - ANSI
 32 - UTF16 Little Endian
 64 - UTF16 Big Endian
128 - UTF8 (z BOM)
256 - UTF8 (bez BOM)

uchwyt/nazwa_pliku - uchwyt lub nazwa pliku

opcja - tryb wykrywania UTF8

1 - sprawdzanie całego pliku
2 - sprawdzanie pierwszej części pliku, tak jak używa domyślnie funkcja FileOpen()

UWAGA:

1. Jeżeli użyjemy nazwy pliku, to plik będzie otwierany i po sprawdzeniu zamykany.

2. Nie należy mieszać uchwytów plików i nazw plików, to znaczy użyć funkcji FileOpen() do otwarcia pliku, a następnie nazwy pliku w funkcji FileGetEncoding().

2. Jeżeli użyjemy uchwytu to parametr "opcja" jest ignorowany, pierwszeństwo ma tryb używany w funkcji FileOpen().

Przykład:

$iEncoding = FileGetEncoding(@ScriptFullPath)
MsgBox(64, "FileGetEncoding", "Tryb kodowania tekstu: " & $iEncoding)


edytuj
FileCreateNTFSLink ( "źródło", "hardlink" [, flaga = 0] )

Funkcja tworzy dowiązanie twarde (hardlink) do pliku lub folderu. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"źródło" - ścieżka do pliku / folderu, do którego zostanie utworzone dowiązanie twarde

"hardlink" - ścieżka z nazwą pliku tworzonego dowiązania twardego

flaga - określa, czy nadpisać dowiązanie jeśli już istnieje, 0 - (domyślnie) nie nadpisać, 1 - nadpisać

Przykład:

;tworzenie ścieżki testowego pliku
Const $sFilePath = @TempDir & "\Plik testowy NTFSLink.txt"

;tworzenie ścieżki dowiązania twardego
Const $sNTFSLink = @DesktopDir & "\NTFSLink.log"

;tworzenie pliku testowego
If Not FileCreate($sFilePath, "To jest plik testowy," & @CRLF & "do którego utworzono dowiązanie twarde.") Then
   MsgBox(64, "", "Błąd przy tworzeniu pliku testowego")
   Exit
EndIf

;tworzenie pliku dowiązania twardego
$iNTFSLink = FileCreateNTFSLink($sFilePath, $sNTFSLink)

If $iNTFSLink Then
   MsgBox(64, "FileCreateNTFSLink", "Dowiązanie zostało utworzone",2)

   ;otwarcie folderu pulpitu, w którym znajduje się plik dowiązania (NTFSLink.log)
   ;po jego kliknięciu zostanie otwarty dowiązany plik testowy
   ShellExecute(@DesktopDir)
   MsgBox(32, "Zakończenie skryptu", "")
Else
   MsgBox(64, "FileCreateNTFSLink", "Błąd przy tworzeniu dowiązania")
EndIf

;usunięcie plików testowych
FileDelete($sFilePath)
FileDelete($sNTFSLink)

;tworzenie plików
Func FileCreate($sFilePath, $sString)
   Local $bReturn = True
   If FileExists($sFilePath) = 0 Then $bReturn = FileWrite($sFilePath, $sString) = 1
   Return $bReturn ;True - plik utworzony, False - błąd
EndFunc   ;==>FileCreate


FileCreateShortcut

edytuj
FileCreateShortcut ( "plik", "lnk" [, "folder_roboczy" [, "arg" [, "opis" [, "icon" [, "hotkey" [, numer_ikony [, state]]]]]]] )

Funkcja tworzy skrót do pliku (*.lnk). Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"plik" - nazwa pliku z pełną ścieżką dostępu

"lnk" - nazwa pliku skrótu z pełną ścieżką dostępu

"folder_roboczy" - folder roboczy pliku

"arg" - dodatkowe argumenty pliku

"opis" - opis pliku

"icon" - pełna ścieżka i nazwa pliku ikon

"hotkey" - skrót klawiszowy do pliku (składnia jak w funkcji Send())

numer_ikony - numer ikony w pliku ikon (zazwyczaj 0)

state - tryb uruchamiania pliku, @SW_SHOWNORMAL, @SW_SHOWMINNOACTIVE lub @SW_SHOWMAXIMIZED


FileGetShortcut

edytuj
FileGetShortcut ( "lnk" )

Funkcja zwraca w postaci tablicy dane o skrócie do pliku. Jeżeli wystąpi błąd makro @error przyjmuje wartość 1.

$aArray[0] = ścieżka docelowa skrótu
$aArray[1] = folder roboczy
$aArray[2] = argumenty
$aArray[3] = opis
$aArray[4] = plik ikony
$aArray[5] = numer ikony w pliku
$aArray[6] = status skrótu (@SW_SHOWNORMAL, @SW_SHOWMINNOACTIVE, @SW_SHOWMAXIMIZED)

lnk - ścieżka dostępu i nazwa pliku skrótu

Przykład:

Const $sFilePath = @DesktopDir & "\FileGetShortcutExample.lnk"

;tworzenie pliku skrótu do pliku explorer.exe
FileCreateShortcut(@WindowsDir & "\explorer.exe", $sFilePath, @WindowsDir, "To są argumenty", _
		"To jest opis skrótu", @SystemDir & "\shell32.dll", "^!t", "15", @SW_SHOWMINNOACTIVE)

;odczyt informacji o skrócie
$aDetails = FileGetShortcut($sFilePath)
If Not @error Then
	MsgBox(64, "FileGetShortcut", "Ścieżka dostępu do pliku:  " & $aDetails[0] & @CRLF & _
			"Folder roboczy:  " & $aDetails[1] & @CRLF & _
			"Argumenty:  " & $aDetails[2] & @CRLF & _
			"Opis:  " & $aDetails[3] & @CRLF & _
			"Nazwa pliku ikony:  " & $aDetails[4] & @CRLF & _
			"Nr ikony w pliku:  " & $aDetails[5] & @CRLF & _
			"Status skrótu:  " & $aDetails[6] & @CRLF)
EndIf

;usunięcie skrótu
FileDelete($sFilePath)


FileGetLongName

edytuj
FileGetLongName ( "nazwa_pliku" [, flaga = 0] )

Funkcja zwraca długą nazwę ścieżek, plików i folderów. Jeżeli wystąpił błąd zwracany jest argument "nazwa_pliku", a makro @error przyjmuje wartość 1.

nazwa_pliku - nazwa pliku ze ścieżką dostępu (krótka lub długa)

flaga - jeżeli równa 1, to ścieżka może być podana względnie, np. "..\file.txt"

Przykład:

;ścieżka do folderu systemowego Program Files, krótka nazwa zgodna z DOS
$sFilePath = @HomeDrive & "\PROGRA~1"

;wyświetlenie długiej nazwy i statusu błędu
MsgBox(64, "FileGetLongName", FileGetLongName($sFilePath) & @LF & "Błąd:  " & @error)


FileGetShortName

edytuj
FileGetShortName ( "nazwa_pliku" [, flaga = 0] )

Funkcja zwraca krótką nazwę ścieżek, plików i folderów (w formacie 8.3 zgodnym z DOS). Jeżeli wystąpił błąd zwracany jest argument "nazwa_pliku", a makro @error przyjmuje wartość 1.

nazwa_pliku - nazwa pliku ze ścieżką dostępu (krótka lub długa)

flaga - jeżeli równa 1, to ścieżka może być podana względnie, np. "..\file.txt"

Przykład:

;ścieżka do folderu systemowego Program Files, długa nazwa
$sFilePath = @HomeDrive & "\Program Files"

;wyświetlenie krótkiej nazwy i statusu błędu
MsgBox(64, "FileGetShortName", FileGetShortName($sFilePath) & @LF & "Błąd:  " & @error)


Selektory plików i folderów

edytuj

FileOpenDialog

edytuj
FileOpenDialog ( "nazwa", "folder_startowy", "filtr" [, opcje [, "domyślna_nazwa" [, hwnd]]] )

Wywołuje systemowy selektor plików i zwraca pełną ścieżkę do wybranego pliku. Jeżeli wybrana była grupa plików, to w zwracanej ścieżce nazwy plików są rozdzielone znakiem pionowej kreski np.: "d:\mój_katalog|plik1.txt|plik2.txt|plik3.txt"

Jeżeli wystąpi błąd, to makro @error przyjmuje wartość:

1 - wybór pliku nie powiódł się

2 - zły filtr plików

Funkcja ustawia folder bieżący (na ten z którego został wybrany plik) oraz makro @WorkingDir (makro to zwraca ścieżkę do folderu bieżącego).

Parametry:

"nazwa" - nazwa okna selektora

"folder_startowy" - ścieżka do folderu startowego, pusty string oznacza folder bieżący

"filtr" - filtr nazw plików, można używać wieloznaczników (np. "(*.*)" - wszystkie pliki, "(*.jpg)" - obraz jpg.

Można łączyć alternatywnie kilka filtrów w grupę np.: "(*.jpg; *.gif; *.bmp)"), przed nawiasem może być wstawiony opis np.: "Obrazki(*.jpg; *.gif; *.bmp)"

Można także utworzyć kilka grup filtrów, rozdzielając je znakiem pionowej kreski | np.:"Dokumenty(*.txt; *.doc; *.odt)|Obrazki(*.jpg; *.gif; *.bmp)"

Parametry opcjonalne:

opcje - określają sposób działania selektora (domyślnie 0)

1 - plik musi istnieć (jeżeli nazwa pliku została wpisana w okienku nazwy pliku)

2 - ścieżka musi istnieć (jeżeli została wpisana w okienku nazwy pliku)

4 - zezwala na wybór grupy plików

Dodanie wartości 8 spowoduje utworzenie struktury folderów, o ile te nie istnieją.

"domyślna_nazwa" - sugerowana nazwa pliku wyświetlana w okienku nazwy pliku (domyślnie brak nazwy)

hwnd - uchwyt do okna nadrzędnego. W momencie zamknięcia okna selektora uaktywni się właśnie to nadrzędne okno. (dokładny opis w rozdziale "Wyskakujące okna - prosta interakcja ze skryptem"

Przykład:

$sPath = FileOpenDialog("Wybierz plik", "", "Dokumenty(*.txt; *.doc; *.odt)|Obrazki(*.jpg; *.gif; *.bmp)", 4)
MsgBox(0, "Test", $sPath)


FileSaveDialog

edytuj
FileSaveDialog ( "nazwa", "folder_startowy", "filtr" [, opcje [, "domyślna_nazwa" [, hwnd]]] )

Funkcja różni się od FileOpenDialog tylko tym, że w oknie selektora zamiast przycisku "Otwórz" jest przycisk "Zapisz".

Inne są też wartości parametru opcje (domyślna wartość 0):

2 - ścieżka musi istnieć

16 - wyświetla ostrzeżenie przy nadpisywanu plików


FileSelectFolder

edytuj
FileSelectFolder ( "nazwa", "obszar" [, opcje [, "folder_startowy" [, hwnd]]] )

Wywołuje systemowy selektor folderów i zwraca ścieżkę do wybranego folderu.

Jeżeli wystąpił błąd, lub użytkownik wybrał przycisk "Anuluj", to zwrócony jest pusty string, a makro @error=1.

Parametry:

"nazwa" - nazwa okna selektora

"obszar" - obszar udostępniony do przeszukiwania, dla "" obszarem jest cały desktop, można ograniczyć do pojedynczego dysku lub katalogu, np.: "f:\"

Parametry opcjonalne:

opcje - określa sposób działania selektora (domyślnie 0):

1 - dodatkowo przycisk tworzenia nowego folderu

4 - dodatkowo okienko edycyjne nazw folderów

"folder_startowy" - ścieżka do folderu startowego, który zostanie wybrany jeśli istnieje, domyślnie string posty, czyli folder startowy nie jest określony

Przykład:

MsgBox(0, "TEST", FileSelectFolder("Wybierz folder", "c:\", 0, "c:\windows\"))


Instalator

edytuj

FileInstall

edytuj

Ciekawą funkcją jest FileInstall. Umożliwia ona dołączenie do skompilowanego skryptu dowolnych dodatkowych plików. Po uruchomieniu tak skompilowanego skryptu pliki te zostaną wypakowane w zadanej lokalizacji. Mechanizm ten pozwala w prosty sposób napisać instalator, który stworzy środowisko pracy programu i umieści w nim różne dodatkowy pliki niezbędne do jego działania np. grafiki, dźwięki, teksty, bazy danych itp.

Jeżeli skrypt uruchomimy w trybie interpretacji to funkcja działa jak FileCopy.

FileInstall ( "źródło", "cel" [, flag] )

przykład:

 FileInstall("instal\logo.jpg", "pic\logo.jpg")
 FileInstall("instal\sound.wav", "wave\gong.wav")
 FileInstall("instal\text.txt", "manual\readme.txt",1)

UWAGA:

”źródło” nie może być zmienną (akceptowane jest jedynie makro @ScriptFullPath), natomiast ”cel” może.

Flaga = 1 powoduje nadpisanie istniejących plików, 0 (domyślne) nie nadpisuje.


Drukowanie pliku tekstowego

edytuj

_FilePrint

edytuj
#Include <File.au3>
_FilePrint($s_File [, $i_Show = @SW_HIDE])

Przykład:

 #Include <File.au3>
 FilePrint($plik_tekstowy_do_wydruku)


Operacje na folderach

edytuj

DirCopy

edytuj
DirCopy ( "folder_źródłowy", "folder_docelowy" [, flaga] )

Funkcja kopiuje folder i wszystkie podfoldery oraz pliki (podobnie jak xcopy). Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"folder_źródłowy" - ścieżka folderu źródłowego (bez końcowego backslash'a), np.: "C:\path1".

"folder_docelowy" - ścieżka folderu źródłowego (bez końcowego backslash'a), np.: "C:\path_copy".

flaga - określa czy mają być nadpisywane istniejące pliki. 0 (domyślnie) - nie, 1 - tak.

UWAGA:" Jeśli struktura katalog docelowy nie istnieje, to zostanie utworzona (jeśli jest to możliwe).

Przykład:

DirCopy(@MyDocumentsDir, "C:\Backups\Moje_dokumenty", 1)


DirCreate

edytuj
DirCreate ( "ścieżka" )

Funkcja tworzy folder. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"ścieżka" - ścieżka tworzonego folderu.

UWAGA: Funkcja będzie także tworzyć katalogi nadrzędne, określone parametrem "ścieżka" (jeśli nie istnieją).

Przykład:

DirCreate("C:\Backups\Moje_dokumenty")


DirGetSize

edytuj
DirGetSize ( "ścieżka" [, flaga] )

Funkcja zwraca wielkość folderu w bajtach, lub -1 gdy wystąpił błąd.

"ścieżka" - ścieżka folderu (bez końcowego backslash'a), np.: "C:\path1".

flaga - określa zachowanie i wynik funkcji i może być kombinacją następujących wartości:

0 - (domyślnie) zwraca wielkość folderu w bajtach

1 - zwraca tablicę zawierającą rozszerzone informacje

2 - nie uwzględnia rozmiar plików w podfolderach

W trybie rozszerzonym tablica zwracana jest 3-elementowa tablica zawierająca następujące elementy:

[0] - rozmiar folderu

[1] - ilość plików

[2] - ilość podfolderów

Przykład:

MsgBox(0, "", "Wielkość folderu WINDOWS: " & DirGetSize(@WindowsDir) & " B")


DirMove

edytuj
DirMove ( "folder_źródłowy", "folder_docelowy" [, flaga] )

Funkcja przenosi folder i wszystkie podfoldery oraz pliki (podobnie jak xcopy). Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"folder_źródłowy" - ścieżka folderu źródłowego (bez końcowego backslash'a), np.: "C:\path1".

"folder_docelowy" - ścieżka folderu źródłowego (bez końcowego backslash'a), np.: "C:\path_copy".

flaga - określa czy mają być nadpisywane istniejące pliki. 0 (domyślnie) - nie, 1 - tak.

UWAGA: Ponieważ brakuje w AutoIt funkcji "DirRename", należy korzystać z DirMove aby zmienić nazwę folderu!

Przykład:

DirMove("C:\Backups\Moje_dokumenty", "D:\Nowy\Moje_dokumenty", 1)


DirRemove

edytuj
DirRemove ( "ścieżka" [, flaga] )

Funkcja usuwa folder. Zwraca 1 gdy sukces, lub 0 gdy wystąpił błąd.

"ścieżka" - ścieżka usuwanego folderu (bez końcowego backslash'a), np.: "C:\path1".

flaga - 0 (domyślnie) - nie usuwa plików i podfolderów, 1 - usuwa pliki i podfoldery.

UWAGA: Niektóre atrybuty folderów i plików mogą powodować że usunięcie będzie niemożliwe.

Przykład:

DirRemove("C:\Backups\Moje_dokumenty")