TFileStream/pl: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: TFileStream/pl
| Old | New | Line | |
|---|---|---|---|
| 1 | + | **TFileStream** jest potomkiem klasy [[TStream/pl|TStream]], który pobiera/przechowuje swoje dane z/w pliku na dysku. | |
| 2 | + | ||
| 3 | + | ## Strumień plikowy | |
| 4 | + | ||
| 5 | + | Strumień plikowy (Filestream) to sposób na łatwe i szybkie przetwarzanie plików, jest idealny do przetwarzania plików o dowolnym rozmiarze. | |
| 6 | + | ||
| 7 | + | TFileStream nie zapewnia buforowania, więc jeśli dostęp do części pliku jest powtarzany, należy go załadować do bufora. Ponadto nie powinien być odczytywany sekwencyjnie bajt po bajcie, ale zawsze w blokach, jeśli to możliwe. Aby uzyskać najwyższą prędkość odczytu przy dużych plikach, rozmiar bloku powinien być oparty na rozmiarze strony systemu operacyjnego. | |
| 8 | + | ||
| 9 | + | # Stałe dostępu do plików | |
| 10 | + | ||
| 11 | + | Poniższe stałe określają sposób dostępu do pliku. Stałe zaczynające się od fmShare można zawsze określić, ale nie są obsługiwane przez wszystkie systemy operacyjne. | |
| 12 | + | ||
| 13 | + | | Stała | Wartość | Opis | | |
| 14 | + | |----|----|----| | |
| 15 | + | | fmCreate | 65280 | Tworzy nowy plik | | |
| 16 | + | | fmOpenRead | 0 | Otwiera plik do odczytu | | |
| 17 | + | | fmOpenWrite | 1 | Otwiera plik do zapisu | | |
| 18 | + | | fmOpenReadWrite | 2 | Otwiera plik do odczytu i zapisu | | |
| 19 | + | | fmShareDenyWrite | 32 | Zabrania zapisywania, jeśli plik jest już otwarty | | |
| 20 | + | | fmShareCompat | 0 | Otwiera plik w trybie zgodności z udziałami DOS | | |
| 21 | + | | fmShareExclusive | 16 | Zablokuj plik do wyłącznego użytku; inne procesy nie mogą uzyskać dostępu do pliku | | |
| 22 | + | | fmShareDenyWrite | 32 | Zablokuj plik do zapisu; inne procesy mogą otwierać plik tylko do odczytu | | |
| 23 | + | | fmShareDenyRead | 48 | Zablokuj plik do odczytu; inne procesy mogą jedynie zapisywać dane | | |
| 24 | + | | fmShareDenyNone | 64 | Nie blokuj pliku; inne procesy mogą kontynuować odczytywanie i zapisywanie do pliku | | |
| 25 | + | ||
| 26 | + | # Przykłady użycia | |
| 27 | + | ||
| 28 | + | - Wczytaj cały plik *fName* i zwróć jako ciąg string. | |
| 29 | + | ||
| 30 | + | ``` pascal | |
| 31 | + | uses | |
| 32 | + | Classes, SysUtils; | |
| 33 | + | ||
| 34 | + | function ReadFromFileStream(fName: string): string; | |
| 35 | + | var | |
| 36 | + | stream: TFileStream; | |
| 37 | + | begin | |
| 38 | + | // otwiera plik do odczytu i jednocześnie blokuje go przed dostępem do zapisu | |
| 39 | + | stream := TFileStream.Create(fName, fmOpenRead or fmShareDenyWrite); | |
| 40 | + | try | |
| 41 | + | SetLength(Result, stream.Size); | |
| 42 | + | stream.Read(Result[1], stream.Size); | |
| 43 | + | finally | |
| 44 | + | stream.Free; | |
| 45 | + | end; | |
| 46 | + | end; | |
| 47 | + | ``` | |
| 48 | + | ||
| 49 | + | - Zapisz ciąg string *txt* do pliku *fName*. | |
| 50 | + | ||
| 51 | + | ``` pascal | |
| 52 | + | uses | |
| 53 | + | Classes, SysUtils; | |
| 54 | + | ||
| 55 | + | procedure SaveToFileStream(fName, txt: string); | |
| 56 | + | var | |
| 57 | + | stream: TFileStream; | |
| 58 | + | size: longint; | |
| 59 | + | begin | |
| 60 | + | stream := TFileStream.Create(fName, fmCreate); | |
| 61 | + | size := Length(txt); | |
| 62 | + | try | |
| 63 | + | stream.Position := 0; | |
| 64 | + | stream.Write(txt[1], size); | |
| 65 | + | finally | |
| 66 | + | stream.Free; | |
| 67 | + | end; | |
| 68 | + | end; | |
| 69 | + | ``` | |
| 70 | + | ||
| 71 | + | ## Zobacz także | |
| 72 | + | ||
| 73 | + | - [[File types/pl|Typy plików]] | |
| 74 | + | - [[doc:rtl/classes/tfilestream.html|TFileStream doc]] | |
| 75 | + | - [[doc:rtl/classes/tstream.html|TStream doc]] | |
| 76 | + | ||
| 77 | + | --- | |
| 78 | + | *From the Free Pascal wiki, page "TFileStream/pl", as it stood on 2022-01-28 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* |
