Niedozwolone znaki w nazwie katalogu lub pliku.
Przed sprawdzeniem za pomocą funkcji DIR, czy plik znajduje się na dysku, należy sprawdzić, czy pełna ścieżka do pliku nie zawiera zastrzeżonych znaków, które nie mogą występować w nazwach katalogów i plików. System Windows sam podpowiada jakich znaków nie możemy używać w nazwach:
Znak ':' może wystąpić w pełnej ścieżce, ale tuż za nazwą (literowym oznaczeniem) dysku, a znak '\' służy jako separator katalogów. Żaden z tych dwóch znaków nie może występować w nazwie katalogu lub pliku.
• Funkcja sprawdzająca, czy plik istnieje na dysku.
⊗ Public Function plikFileExist(sFullPath As String) As Boolean
-
Funkcja plikFileExist (...) sprawdza, czy w lokalizacji na którą wskazuje argument sFullPath,
będący pełna ścieżką do pliku, znajduje się wskazany plik. Funkcja pobiera położenie pierwszego wystąpienie znaku ':'
oraz położenie ostatniego wystąpienia znaku '\' w pełnej ścieżce do pliku sFullPath.
Jeżeli znaki te ':' i '\' nie występują, lub gdy znak '\' znajduje się na końcu
ścieżki funkcja generuje błąd wykonania "Nieprawidłowa ścieżka do pliku (folderu)."
Jeżeli wszystko jest w porządku, funkcja sprawdza, począwszy od znaku po pierwszym wystąpieniu znaku ':', czy którykolwiek ze znaków cBadChars = ":/*?<"">|" występuje w pełnej ścieżce do pliku. Jeżeli którykolwiek nieprawidłowy znak zostaje znaleziony, funkcja generuje błąd wykonania informując, że w ścieżce do pliku został znaleziony nieprawidłowy znak. Następnie z pełnej ścieżki do pliku pobrana zostaje nazwa pliku wraz z rozszerzeniem, która zostaje porównana z nazwą pliku zwróconą przez funkcję Dir. - argumenty:
- sFullPath
- pełna ścieżka do pliku
- zwraca:
-
Przy powodzeniu, jeżeli plik znajduje się na dysku, zwraca TRUE. Przy niepowodzeniu, gdy plik nie został znaleziony, lub pełna ścieżka do pliku zawiera nieprawidłowy znak, funkcja zwraca FALSE.
- autor: Zbigniew Bratko
- data: 04.02.2019
Option Compare Database Option Explicit Public Function plikFileExist(sFullPath As String) As Boolean ' Dim lInStr As Long Dim lInStrRev As Long Dim sFileName As String Dim sBadChars() As Byte Dim i As Integer Const cProcName As String = "Funkcja plikFileExist(...)" Const cAttribFile As Long = vbNormal Or vbReadOnly Or vbHidden Or vbArchive ' pobierz położenie pierwszego wystąpienia znaku ":" lInStr = InStr(1, sFullPath, ":", vbBinaryCompare) ' pobierz położenie ostatniego wystąpienia znaku "\" lInStrRev = InStrRev(sFullPath, "\", -1, vbBinaryCompare) ' jeżeli ścieżka nie zawiera znaku ":" lub znaku "\", ' bądź na końcu ścieżki znajduje się znak "\" If lInStr = 0 Or lInStrRev = 0 Or lInStrRev = Len(sFullPath) Then Err.Raise errFileBadPath, cProcName, _ errBmpDescription(errFileBadPath) End If 'przygotuj tablicę z kodami ASCII nieprawidłowych znaków sBadChars() = StrConv(cBadCharsInPath, vbFromUnicode) lInStr = lInStr + 1 ' sprawdzaj w pętli, od znaku po pierwszym wystąpieniu ':', ' czy pełna ścieżka do pliku zawiera nieprawidłowy znak For i = LBound(sBadChars) To UBound(sBadChars) If InStr(lInStr, sFullPath, Chr$(sBadChars(i)), vbBinaryCompare) Then Err.Raise errFileBadName, cProcName, _ errBmpDescription(errFileBadName) End If Next 'wyodrębnij nazwę pliku z rozszerzeniem ze ścieżki sFileName = Mid$(sFullPath, lInStrRev + 1) ' porównaj, czy funkcja Dir zwróciła taką samą nazwę pliku sFileName If StrComp(Dir(sFullPath, cAttribFile), sFileName, vbTextCompare) = 0 Then plikFileExist = True End If End Function