Funkcja sprawdzająca argumenty otwarcia pliku.
Na stronie Walidacja argumentów otwarcia pliku przedstawiłem funkcję plikCheckArguments(...) sprawdzającą poprawnośc argumentów funkcji operujących na plikach tekstowych i binarnych. Nie jest to idealna funkcja uwzględniająca wszystkie przypadki nieprawidłowego otwarcia pliku, ale w większości przypadków umożliwia wychwycenie błędów podczas próby otwarcia pliku w trybie do „Do odczytu” lub „Do zapisu”.
Odczyt danych z pliku do zmiennej typu String.
Skoro mamy funkcję sprawdzającą poprawność argumentów, to napiszmy pierwszą funkcje, które z niej korzysta. Będzie nią funkcja plikFileToString(...) która pobiera do zmiennej typu String plik, lub fragment pliku.
⊗ Public Function plikFileToString( _ ByVal sFilePath As String, _ ByRef sRetString As String, _ Optional ByVal lStart As Long = 1, _ Optional ByVal lBytes As Long = -1) As Long
- Funkcja plikFileToString (...) otwiera plik w trybie „Do odczytu” i pobiera kreśloną ilość bajtów lBytes, począwszy od startowego bajtu lStart. Zwraca ilość pobranych bajtów, a w argumencie ByRef sRetString As String zwraca pobrane bajty jako ciąg znaków.
- argumenty:
- sFilePath
- pełna ścieżka do pliku, plik musi istnieć i nie może być otwarty na wyłączność.
- sRetString
- przekazywany ByRef argument, w którym zwracane są pobrane bajty. Przy niepowodzeniu wywołania funkcji zawiera ciąg zerowej długości "".
- lStart
- numer bajtu od którego ma nastąpić odczyt, domyślnie = 1.
- lBytes
- ilość bajtów do pobrania. Dla domyślnej wartości -1 pobierane są wszystkie bajty począwszy od początkowego bajtu startowego lStart. Jeżeli ilość bajtów do pobrania przekracza ilość dostępnych bajtów w pliku, funkcja zwraca wszystkie bajty począwszy od bajtu lStart, aż do końca pliku.
- zwraca:
-
Przy powodzeniu zwraca wartość ilość pobranych bajtów,a w argumencie ByRef sRetString zwraca pobrane bajty. Przy niepowodzeniu zwraca -1, a w argumencie ByRef sRetString ciąg zerowej długości "". Jeżeli plik nie zawiera danych (jest pusty) funkcja zwraca 0, a w argumencie ByRef sRetString ciąg zerowej długości "".
- autor: Zbigniew Bratko
- data: 15.01.2018
Uwaga.
Funkcja plikFileToString(...) korzysta z pomocniczej funkcji plikCheckArguments(...) sprawdzającej poprawność argumentów.
Option Compare Database Option Explicit Public Function plikFileToString( _ ByVal sFilePath As String, _ ByRef sRetString As String, _ Optional ByVal lStart As Long = 1, _ Optional ByVal lBytes As Long = -1) As Long ' Dim lLenFile As Long Dim ff As Integer Const cProcName As String = "plikFileToString(...)" sRetString = "" ' sprawdź, czy możliwy jest odczyt określonych bajtów z pliku If plikCheckArguments(sFilePath, False, lStart, lBytes, , cProcName) = False Then plikFileToString = -1 Exit Function End If ' pobierz długość pliku w bajtach lLenFile = FileLen(sFilePath) ' jeżeli plik jest pusty, to zakończ działanie If lLenFile = 0 Then plikFileToString = 0 Exit Function End If ' określ ilość bajtów do pobrania, począwszy od bajtu startowego If lBytes = -1 Then lBytes = lLenFile - lStart + 1 Else ' jeżeli ilość bajtów do pobrania, począwszy od bajtu startowego przekracza ' rozmiar pliku, dostosuj ilość pobieranych bajtów do rozmiaru pliku If (lStart + lBytes) > lLenFile Then lBytes = lLenFile - lStart + 1 End If 'pobierz pierwszy wolny numer pliku ff = FreeFile ' otwórz plik i pobierz dane Open sFilePath For Binary Access Read As #ff ' przygotuj bufor na przyjęcie bajtów pliku sRetString = String(lBytes, vbNullChar) ' pobierz określoną ilość bajtów do przygotowanego buforu Get #ff, lStart, sRetString Close #ff ' zwróć ilość pobranych bajtów plikFileToString = lBytes End Function