Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Jak okreslić czy ścieżka istnieje ?
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004
Jak okreslić czy ścieżka istnieje ?

Witam

Mam zmienną fPath, której użytkownik przypisuje ścieżkę i problem polega na tym, że nie wiem jak sprawdzić czy owa ścieżka istnieje.

Funkcja Dir wysypuje się gdy np. fPath = "g:\" a zawartość dysku g jest pusta

Ponadto powino być zabezpieczenie przed tym gdy zmiennej fPath zostaną przypisane np. "\", "." itd.
aby także  wykrywało że ścieżka nie istnieje

Ma to działać tak, że ścieżka zaczyna się od litery dysku plus ":\" itd.

Nie chcę stosować pętli typu:

Jeśli Left$(fPath,3) = np. "C:\" to itd.

Czy jest jakaś funkcja, która to w prosty sposób rozwiązuje ??

Pozdrawiamn


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

27-09-2004 21:39
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Sen




Typ: neutral
Postów: 20
Zarejestrowany: Jan 2004

Jest taka funkcja API jak PathFileExists


Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long

27-09-2004 22:17
Pokaż profil Sen  Wyślij email do Sen   
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Wiem już ją testowałem ale ona sprawdza tylko pliki a gdy wpiszę "c:\" zwróci False

Problem nie rozwiązany


Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

28-09-2004 10:30
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003

A funkcja Dir()???

If Dir(sciezka, vbDirectory)<>"" then
    MsgBox "Istnieje"
Else
    MsgBox "NIE istnieje"
End If


_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

28-09-2004 15:53
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Tak jak pisałem wcześniej - funkcja Dir() wysypuje się gdy katalog lub dysk jest pusty

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

28-09-2004 17:24
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004


Dim objFS As Object

Set objFS = CreateObject("Scripting.FileSystemObject" )
If objFS.DriveExist("m:\" ) Then
    MsgBox "Partycja istnieje"
Else
    MsgBox "Patrycja nie istnieje"
End If



_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-09-2004 13:30
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

a co będzie jak wpiszę "m:\katalog\" ?

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

29-09-2004 14:13
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
marcin_an
Forumowicz




Typ: neutral
Postów: 1265
Zarejestrowany: Mar 2004

Najlepiej poprostu sprawdź.
Ja nie mogę, bo u mnie z niewiadomych przyczyn FSO wogóle nie działa (a wcześniej działało).


_____________________________________________
Jedzonko dla Google'a:
Forum na temat Visual Basic, C, C++, Pascal, Programowanie, API, PHP, VBA, VB.NET, QBasic, VBScript, Komputery
Moja strona o wszystkim

29-09-2004 14:31
Pokaż profil marcin_an  Wyślij email do marcin_an   Odwiedź stronę marcin_an  
Viper87



Typ: neutral
Postów: 490
Zarejestrowany: Oct 2002

If right(path, 1)="\" then
......


W ten sposób sprawdzisz czy ścieżka ma na końcu "\" czy nie. Przed wszystkim daj na początku:


On error resume next

Wtedy nie będzie Ci wywalał się, jak w stacji CD lub dyskietek nie będzie dysku...

Co do zabezpieczenia przed jakimiś śmieciami w zmiennej, to rozwiąż to pętlą, wstawioną przed DIR.

For a=1 to len(path)
If mid(path, a, 1)="." then
exit for
Msgbox "Wykryto niedozwolone znaki!"
Exit sub
End if
Next a


Co do zwielokrotnienia ilości znaków "\" lub ich braku, to funkcja Dir zwróci pusty string w takim wypadku.

Mam nadzieję, że trochę pomogłem

[Post edytowany dnia 02-10-2004 22:35 przez Viper87]


_____________________________________________
Viper

"Savoir c`est prevoir, prevoir c`est prevenir". 
(Wiedzieć to przewidzieć, przewidzieć to zapobiegać) 


29-09-2004 16:05
Pokaż profil Viper87  Wyślij email do Viper87   Odwiedź stronę Viper87  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

Witam - zrobiłem to trochę inaczej z wykorzystaniem funkcji API PathIsDirectory, która określa czy ścieżka istnieje

Dzięki za wszystkie rady

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

29-09-2004 18:05
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

A tak na marginesie (zapomniałem dodać) - funkcja Dir nie służy do określania czy ścieżka istnieje tylko do zwracania pierwszej znalezionej pozycji w podanej ścieżce oczywiscie wg podanych kryteriów czyli vbDirectory itd.

Przykładem jest to że Dir("A:\",...) wywoła błąd jeśli stacja jest pusta

Pozdrawiam


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

29-09-2004 18:10
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
losmac
"profesorek"




Typ: neutral
Postów: 758
Zarejestrowany: May 2003


Dir - funkcja
Zwraca wartość typu String reprezentującą nazwę pliku, katalogu lub foldera, która odpowiada określonemu wzorcowi, atrybutowi pliku albo etykiecie dysku.

Składnia

Dir[(nazwa_ściezki[, atrybuty])]

Funkcja Dir ma następujące elementy:

ElementOpis
nazwa_
ścieżkiElement nieobowiązkowy. Wyrażenie znakowe określające nazwę pliku&#8212;może zawierać katalog lub folder oraz oznaczenie dysku. Jeśli nazwa_ścieżki nie zostanie znaleziona, zwracany jest ciąg o zerowej długości.
atrybutyElement nieobowiązkowy. Jest to stała lub wyrażenie numeryczne, którego suma określa atrybuty pliku. W przypadku pominięcia tego elementu zwracane są wszystkie pliki pasujące do nazwa_ścieżki.
Ustawienia

Argument atrybuty może przyjmować wartości:

StałaWartośćOpis
vbNormal0Zwykły
vbHidden2Ukryty
vbSystem4Plik systemowy
vbVolume8Etykieta dysku; jeśli zostanie określona, wszystkie inne atrybuty są ignorowane
vbDirectory16Katalog lub folder
Uwaga  Powyższe stałe są zdefiniowane przez Visual Basic for Applications i mogą być stosowane w dowolnym miejscu kodu programu zamiast ich rzeczywistych wartości.

Użycie

Funkcja Dir pozwala na stosowanie symboli wieloznacznych zastępujących wiele znaków (*) lub pojedynczy znak (?), umożliwiając w ten sposób wskazanie wielu plików.
Przy pierwszym wołaniu funkcji Dir należy określić nazwę_ścieżki, w przeciwnym razie wystąpi błąd. Ponadto, nazwa_ścieżki musi wystąpić, jeżeli podano atrybuty pliku.
Funkcja Dir zwraca nazwę pierwszego pliku, który odpowiada nazwie_ścieżki. Aby uzyskać nazwy kolejnych plików pasujących do nazwy_ścieżki, należy ponownie wywołać funkcję Dir, lecz bez elementów. Po wyczerpaniu plików, których nazwy pasują do wzorca, Dir zwróci ciąg o zerowej długości ("". Po zwróceniu przez funkcję ciągu o zerowej długości, w kolejnym wywołaniu funkcji należy określić nazwę_ścieżki, w przeciwnym razie wystąpi błąd. Możliwe jest wskazanie nowej nazwy_ścieżki bez odczytywania wszystkich nazw plików odpowiadających bieżącej nazwie_ścieżki. Nie można jednak wywoływać funkcji Dir rekurencyjnie. Wywoływanie funkcji Dir z atrybutem vbDirectory nie zwraca podkatalogów.

Wskazówka  Zwracane nazwy plików nie są uporządkowane, można je jednak zapisać do tablicy, a następnie posortować zawartość tablicy.


Jakbyś wykorzystał to co tu jest napisane, to byś się przekonał, że da się użyć Dir'a do odczytywania, czy ścieżka istnieje. Wystarczy napisać prosty ErrorHandler, który odpowiednio przekształci komunikaty o błędzie na Twoje potrzeby.
Przykład:

Sub cos()
Dim strtmp As String
strtmp = "F:"
    'dysk F: jest CD-Rom'em i jest pusty
    MsgBox "Ścieżka: '" & strtmp & "' istnieje: " & CzySciezkaIstnieje(strtmp)
strtmp = "A:"
    'dysk A: jest stacją dyskietek i stacja jest pusta
    MsgBox "Ścieżka: '" & strtmp & "' istnieje: " & CzySciezkaIstnieje(strtmp)
strtmp = "C:\Moje dokumenty\"
    MsgBox "Ścieżka: '" & strtmp & "' istnieje: " & CzySciezkaIstnieje(strtmp)

End Sub

Function CzySciezkaIstnieje(sciezka As String) As Boolean
Dim strtmp As String

CzySciezkaIstnieje = True

On Error GoTo Err_CzySciezkaIstnieje

If Right(sciezka, 1) = ":" Or Right(sciezka, 1) = "\" Then
    strtmp = Dir(sciezka, vbDirectory)
Else
    strtmp = Dir(sciezka, vbNormal)
End If

Exit_CzySciezkaIstnieje:
    Exit Function
   
Err_CzySciezkaIstnieje:
    Select Case Err.Number
        Case 71, 76
            CzySciezkaIstnieje = False
            Resume Exit_CzySciezkaIstnieje
        Case Else
            MsgBox Err.Description, vbExclamation, Err.Number
            CzySciezkaIstnieje = False
            Resume Exit_CzySciezkaIstnieje
    End Select
End Function



_____________________________________________
POSTULATY STARUSZKA:
1) Ludzie, dbajcie o polszczyznę!!!
2) Ludzie, zadawajcie kompletne pytania, a nie rzucacie ochłapy i trzeba się domyślać o co chodzi!!!

Powodzenia
Maciej Łoś

29-09-2004 18:34
Pokaż profil losmac  Wyślij email do losmac   Odwiedź stronę losmac  
Wszystkich odpowiedzi: 11 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1