Dateien verwalten

Hallo zusammen,

ich benutze VB6 (nicht VB6.net)
Welche Befehle gibt es da, um abzufragen, ob eine Datei vorhanden ist und welches der Ordner ist, in dem meine Programm-exe liegt.
Gibt es da auch eine Klasse (wie System.Environment in VB6)?

Gruß Axel

Hallo Axel,
den ganzen PFad der PRogramm-exe bekommst du über

App.Path

Zum Abragen der ORdner- oder Dateiexistenz ist das hier vielleicht ganz hilfreich: http://www.vbarchiv.net/archiv/tipp_1085.html

Gruß Pascal

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Axel,

wie schon geschrieben ueber app.path kannst du den Pfad ermitteln, wo sich deine Exe befindet, bzw. von wo sie ausgefuehrt wird :smile:

Um zu prüfen ob ein File existiert kannst du folgende Wege waehle

1: Mache dich der Dir Function zu nutze
2: Ueber das FileSystemObject ( FSO)
3: einfach das File zu öffen und dann schliesseb und ggbfls. Fehler abfangen

MFG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hi Alex,

Das mit der app.path funktioniert gut.
Mit der dir-Funktion hab ich auch mal ein bißchen rumhantiert, aber damit konnte ich nicht eine bestimmte Datei abfragen, sondern musste das um 2 Ecken herum programmieren.
Das mit dem Fehler abfangen hab ich noch nicht ganz verstanden. Ich hab da schon öfters was drüber gelesen, aber nicht verstanden wie das funktioniert. Was muss ich da denn machen? (Dann weiß ich das für zukünftige Anwendungen :smile: )

Gruß Axel

Hallo Pascal,
vielen Dank, das hat mir sehr geholfen.
Gruß Axel

Hi Alex,

Das mit der app.path funktioniert gut.

Na fein :smile:

Mit der dir-Funktion hab ich auch mal ein bißchen rumhantiert,

Also dir Dir Function nehme ich nur ungern, da sie in manchen Faellen etwas falsches zurueck gibt.
Aber überprüfen kannst du es mit if dir(Filename) ="" then …
Für Filename trage einfach as zu überprüfende File ein.
Erhaelst du eine Leere Zeichefolge, also „“ dann existiert das File nicht. Existiert das File, so erhaelst du den Filenamen zurueck :smile:

aber damit konnte ich nicht eine bestimmte Datei abfragen,
sondern musste das um 2 Ecken herum programmieren.

Wieso denn nicht? Bei mir klappt das anstandslos!
Wie hast du es denn realisiert ?

Das mit dem Fehler abfangen hab ich noch nicht ganz
verstanden. Ich hab da schon öfters was drüber gelesen, aber
nicht verstanden wie das funktioniert. Was muss ich da denn
machen? (Dann weiß ich das für zukünftige Anwendungen :smile: )

Am besten du schreibst dir eine seperate Function und se gibt dir true oder false zurueck falls das File exitiert.
Eine solche Funktion koennte wiefolgt aussehen.

Hier einige Varianten

Public Function FileExist(Dateiname As String) As Boolean
 On Error Goto Fehler
 FileExist = Dir$(Dateiname) ""
 Exit Function
Fehler:
 FileExist = False
 Resume Next
End Function

Public Function FileExists(strPath As String) As Boolean
 On Error Resume Next
 FileExists = ((GetAttr(strPath) And (vbDirectory Or vbVolume)) = 0)
End Function

Private Declare Function FindFirstFile Lib "kernel32.dll" Alias "FindFirstFileA" ( \_
 ByVal lpFileName As String, \_
 ByRef lpFindFileData As WIN32\_FIND\_DATA \_
) As Long
Private Declare Function FindClose Lib "kernel32.dll" ( \_
 ByVal hFindFile As Long \_
) As Long

Private Const INVALID\_HANDLE\_VALUE As Long = -1
Private Const MAX\_PATH As Long = 260

Private Type FILETIME
 dwLowDateTime As Long
 dwHighDateTime As Long
End Type

Private Type WIN32\_FIND\_DATA
 dwFileAttributes As Long
 ftCreationTime As FILETIME
 ftLastAccessTime As FILETIME
 ftLastWriteTime As FILETIME
 nFileSizeHigh As Long
 nFileSizeLow As Long
 dwReserved0 As Long
 dwReserved1 As Long
 cFileName As String \* MAX\_PATH
 cAlternate As String \* 14
End Type

Private Function FileExists(ByRef strFileName As String) As Boolean
 Dim wfdWFD As WIN32\_FIND\_DATA
 Dim hFile As Long
 hFile = FindFirstFile(strFileName, wfdWFD)
 FileExists = (hFile INVALID\_HANDLE\_VALUE)
 Call FindClose(hFile)
End Function

Private Function FileExist(Filename as string) as boolean
on error goto Fehler
dim fn as byte
FileExist =false
fn = freefile
open Filename for binary as #fn
close fn
Fileexist=true
exit function
fehler:
 exit function
end Function

Aufruf erfolgt jeweils mit if Fileexist(zu prüfende Datei) then
'File ist vorhanden
else
'File existiert nicht
end if

Gruß Axel

MFG Alex

Das mit der app.path funktioniert gut.
Mit der dir-Funktion hab ich auch mal ein bißchen rumhantiert,
aber damit konnte ich nicht eine bestimmte Datei abfragen,
sondern musste das um 2 Ecken herum programmieren.
Das mit dem Fehler abfangen hab ich noch nicht ganz
verstanden. Ich hab da schon öfters was drüber gelesen, aber
nicht verstanden wie das funktioniert. Was muss ich da denn
machen? (Dann weiß ich das für zukünftige Anwendungen :smile: )

Hi Axel,
in VBA sieht ne normale Sub so aus:

sub tt()
dein Code
End sub

mit Fehlerabfangung halt so:

sub tt()
on error goto to behandlung
dein Code
exit sub

behandlung ’ oder auch behandlung: , kenne beides

dein Fehlercode
End sub

Schau mal in der Hilfe nach On Error goto , err usw.
Gruß
Reinhard

Hi Alex

so wie du das mit der dir-Funktion machst ist das natürlich viel einfacher. So funktionier es auch bei mir. Ich hab da wohl etwas kompliziert gedacht, als ich so am programmieren war.
Ich hab die dir-Funktion mit dem Ordner, in dem die Datei ist, abgefragt. Als Rückgabewert hat die Funktion ja dann den Namen der ersten Datei in dem Ordner. Den Rückgabewert hab ich dann so lange mit dem Namen der gesuchten Datei verglichen, bis es gleich war oder der Rückgabewert „“ ergab. Ist zwar ein wenig komplizierter, funktioniert aber auch. Das Problem war nur, dass du den Dateinamen in den eigentlichen Dateinamen und den Dateipfad trennen musst.

Vielen Dank für deine Bemühungen.
Gruß Axel

Hallo Axel,

nichts zu danken Axel :smile:

Weisst du nun wie du das mit der fehlerbehandlung machen kannst oder hast du da noch fragen?
MFG Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Alex,

das mit der Fehlerbehandlung ist mir jetzt auch klar. Ich werd das demnächst wohl gleich ausprobieren können. (Muss ein kleines Progrämmle in meiner Firma schreiben :wink: )
Vielen Dank für die geduldigen Erklärungen.

Gruß Axel

Hallo Axel,

du kannst das ganze auch ohne FSO und Dir realisieren in dem du
die FileLen-Funktion nutzt:
Str_File = +

Public Function FileExists(ByVal Str_File As String) As Boolean
On Error GoTo Error_Routine

1 Dim LenFile As Long
2 On Local Error Resume Next
3 LenFile = FileLen(Str_File)
4 FileExists = (Err = 0)
5 On Local Error GoTo 0

Exit_Routine:
Exit Function
Error_Routine:
Err.Raise Err.Number, „FileExists(“ & Erl & „):“ & Err.Source, Err.Description
'Hier zusätzliche Fehlerbehandlung einbauen
End Function

Wenn die Datei nicht existiert dann ist FileLen = 0

Vieleicht hilft dir diese möglichkeit auch…

Gruss
Alex

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]