Access

  MS Access 2010+  |  Przetwarzanie plików  |   VBA 7.0

• Czy plik istnieje na dysku?

Przy każdej próbie odwołania się do pliku na dysku, powinniśmy upewnić się, czy plik faktycznie znajduje się w miejscu docelowym na dysku.

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:

Niepoprawne znaki

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

 

 
Akceptuję Polityka prywatności Tekst informacyjny o polityce Cookies