Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

FSO - Order/Pfad oder Datei ?! (FileSystemObject)

Begonnen von Jakomo, Mai 25, 2024, 10:00:14

⏪ vorheriges - nächstes ⏩

Jakomo

Ich denke wohl zu kompliziert..

Zum Problem:

Mittels einer Funktion die das FSO nutzt, will ich prüfen, ob und wo eine Datei oder ein Ordner (oder .SubFolders) liegt.
Dabei kann es vorkommen, dass als String (filespec) ein SubOrdner (wie "\subordner"), ein Pfad ohne Datei (wie "H:\stamm\hierhinein"), oder eine ganzer Pfad mit Datei ("H:\stamm\hierhinein\Beispieldatei.jpg" oder "H:\stamm\hierhinein\Beispieldatei.jpeg")
übergeben wird.

Und die erste Frage die in der Function zu lösen ist: "Hab ich einen Pfad oder einen Pfad mit Dateinamen bekommen?" (ungeachtet der Existenz von Datei oder Ordner)

Mittels "Exists" kann ich natürlich prüfen ob man mit dem String überhaupt was findet
Beispiel:
 
Function Pfadkontrolle(filespec As String) As Integer
 Set fs = CreateObject("Scripting.FileSystemObject")
    If fs.FolderExists(filespec) Then
    '...
    end if
    If fs.FileExists(filespec) Then
    '...
    end if
set fs = nothing
'end function

Sinnvoll wird das ganze aber erst, wenn ich vorher weiss, ob eine Datei im String mit angegeben wurde.
Warum?:
Prüfe ich ob der Ordner existiert  (FolderExists(filespec)) ,
aber es ist eine Datei in filespec mit dabei, gibt es naturgemäß und korrekt eine Fehlermeldung, obwohl der ordner durchaus existieren kann

Prüfe ich ob die Datei existiert  (FileExists(filespec)) ,
aber es ist gar keine Datei in filespec genannt, gibt es naturgemäß und korrekt ebenfalls eine Fehlermeldung, obwohl die fehlermeldung für die kommenden Ordneroperationen probleme macht.


Frage: Bietet mir das FSO irgendwie eine schlanke Lösung?
zu prüfen, ob ich im filespec "nur" eine Pfadangabe, oder zudem auch eine Dateiangabe bekommen habe?


Wie kann ich den Pfad VOR dem entsprechenden Ordner "abschneiden", ohne wieder auf programmierte suchen nach "\" zurückzugreifen?
Die Eigenschaft ".SubFolders" hilft mir da ja nicht und ".GetFolder" liefert mir auch keinen "reinen Ordnernamen".

Danke für Eure Hilfe



MzKlMu

Hallo,
prüfe ob im String ein Punkt vorhanden ist. Wenn ja, ist die Datei dabei.

Nur mal so auf die Schnelle.
Gruß Klaus

PhilS

Zitat von: Jakomo am Mai 25, 2024, 10:00:14Frage: Bietet mir das FSO irgendwie eine schlanke Lösung?
zu prüfen, ob ich im filespec "nur" eine Pfadangabe, oder zudem auch eine Dateiangabe bekommen habe?
Jein. Das FSO hat keine Funktionen die direkt diese Funktionalität bieten, aber du kannst die GetFile/GetFolder-Methoden mit Fehlerbehandlung verwenden und dann aus deren Ergebnissen ableiten ob der Pfad auf eine Datei oder einen Ordner zeigt.

Private m_fs As Object

Private Property Get fs() As Object
    If m_fs Is Nothing Then
        Set m_fs = CreateObject("Scripting.FileSystemObject")
    End If
    Set fs = m_fs
End Property

Public Function IsFolder(ByVal filespec As String) As Boolean
    On Error Resume Next
    IsFolder = Not fs.GetFolder(filespec) Is Nothing
End Function

Public Function IsFile(ByVal filespec As String) As Boolean
    On Error Resume Next
    IsFile = Not fs.GetFile(filespec) Is Nothing
End Function


Zitat von: Jakomo am Mai 25, 2024, 10:00:14Wie kann ich den Pfad VOR dem entsprechenden Ordner "abschneiden", ohne wieder auf programmierte suchen nach "\" zurückzugreifen?

Die GetFile/GetFolder-Methoden liefern dir ja ein entsprechendes Objekt. Dessen .Name-Eigenschaft ist der reine Name des jeweiligen Objektes ohne den Pfad.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Jakomo

Ja, danke. So mach ich das derzeit auch, ist aber leider auch nicht fehlerfrei bzw. sauber.
 Ich dachte nur das (ohnehin recht umfangreiche) FSO hat da eine professionellere Lösung oder jemand hat damit einen schicken workaround.

Ich mache das derzeit wie folgt:
1. Ist ein Punkt drin?
  Falls ja vermutlich mit Dateiangabe
2.
'If fs.FileExists(filespec) Then
   
  '...und die Datei existiert!

'else
   ' ... Entweder (a) gibt es die Datei nicht, oder (b) es ist doch keine (b wird derzeit ignoriert)

'end if

Jakomo

Dankeschön mir Euren antworten, kann ich den Punkt "abhaken" !  :)