AutoIt/Czytanie i pisanie do plików
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 ( "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:
$handle=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 (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:
$handle=FileOpen("C:\Windows\tymczasowy\Test.txt",9)
FileClose($handle)
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 ( uchwyt|"nazwa_pliku", dane )
Funkcja dopisuje dane na końca 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:
$handle=FileOpen("Test.txt",1)
FileWrite($handle,"Jakiś tekst")
FileClose($handle)
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:
$handle=FileOpen("Test.txt",2)
FileWrite($handle,"Jakiś tekst")
FileWrite($handle, @CRLF) ; Koniec linii
FileWrite($handle,"Jakiś tekst 2") ;już w nowej linii
FileClose($handle)
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 ( uchwyt|"nazwa_pliku", "tekst" )
Przykład:
FileWriteLine("Test.txt","Jakiś tekst")
FileWriteLine("Test.txt","Jakiś tekst 2")
Czytanie z plików
[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 to FileReadLine - służy do odczytania z pliku tekstowego wybranej linii tekstu:
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
Inne operacje na plikach
[edytuj]Sprawdzanie czy istnieje dany plik lub folder
[edytuj]FileExists ( "path" )
Jeżeli tak to zwraca 1, w przeciwnym razie 0.
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 lub całego folderu
[edytuj]FileDelete ( "path" )
Zwraca 1 gdy sukces, 0 gdy wystąpił błąd lub plik (folder) nie istnieje.
Przykład:
MsgBox(0,"Test",FileDelete("test.txt"))
Kopiowanie wskazanego pliku (lub plików)
[edytuj]FileCopy ( "źródło", "cel" [, flag] )
Funkcja 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\")
Ustawienie katalogu bieżącego
[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, 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)
Selektory plików i folderów
[edytuj]Selektor plików FileOpenDialog
[edytuj]FileOpenDialog ( "nazwa", "folder_startowy", "filtr" [, opcje [, "domyślna_nazwa" [, hwnd]]] )
Wywołuje systemowy selektor 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:
$file=FileOpenDialog("Wybierz plik","","Dokumenty(*.txt; *.doc; *.odt)|Obrazki(*.jpg; *.gif; *.bmp)",4))
MsgBox(0,"Test",$file)
Selektor plików 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
Selektor folderów
[edytuj]FileSelectFolder ( "nazwa", "obszar" [, opcje [, "folder_startowy" [, hwnd]]] )
Wywołuje systemowy selektor 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]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ą, natomiast ”cel” może.
Flaga 1 powoduje nadpisanie istniejących plików, 0 (domyślne) nie nadpisuje.
Drukowanie pliku tekstowego
[edytuj]_FilePrint($s_File [, $i_Show = @SW_HIDE]) – drukowanie pliku tekstowego
#Include <File.au3>
FilePrint($plik_tekstowy_do_wydruku)