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