Problem beim Lesen?Falscher Befehl?

Trancefreak

Mitglied
Hallo Leute brauche mal wieder bissl hilfe ^^
Also ich bin dabei ein Programm zu schreiben das funktioniert zwar aber wenn man jetzt die Datei unter einem anderen Pfad hat kommt ein Laufzeit Fehler und zwar möchte ich wissen wie der Befehl ist,dass das programm prüft ob die hosts datei unter "C:\Winnt\system32\drivers\etc\hosts" ist falls sie dort nicht vorhanden ist soll unter "C:\Windows\system32\drivers\etc\hosts" geprüft werden ob sie vorhanden ist und wenn sie vorhanden ist dass es dort reinschreibt bis lang habe ich folgenden Befehl verwendet!

Private Sub Command4_Click()
Open "C:\Windows\system32\drivers\etc\hosts" For Output As #1
Print #1, "127.0.0.1 localhost"
Close #1
End Sub

Aber wie gesagt wenn die Datei unter einem anderen Pfad ist kommt ein Laufzeitfehler!

Were bei Hilfe dankbar
 
Mit folgendem Befehl kannst du prüfen ob eine Datei oder ein Verzeichnis existiert:
Code:
Dir("Pfad")
Das Ergebnis ist ein Nullstring "" wenn die Datei / das Verzeichnis nicht existiert und "Pfad" wenn sie/es existiert.
Code:
Dim Pfad1 as String
Dim Pfad2 as String
dim Pfad as string
Pfad1 = "1. Pfad zur Datei"
Pfad2 = "2. Pfad zur Datei"
if Dir(Pfad1) then
    Pfad = Pfad1
else if Dir(Pfad2) then
    Pfad = Pfad2
else
    'Datei existiert weder im ersten noch im zweiten Pfad.
end if
Wenn du das Programm aber dynamischer gestalten willst wäre es sinnvoll den Systemordner mit einer Funktion zu ermitteln.
Für folgenden Code muss das WSH (Windows Scripting Host) installiert sein:
Code:
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Pfad1 = FSO.GetSpecialFolder(1) & "\drivers\etc\hosts"
Das WSH stellt das FileSystemObject bereit, welches Zugriffe auf das Dateisystem ermöglicht.
Die Methode GetSpecialFolder() liefert den Pfad zu Systemverzeichnissen.
So kannst du ermitteln wo sich z.B. das System32 befindet, egal ob der Windowsordner nun Windows, WinNt oder Win98 heißt und egal auf welcher Platte er liegt (muss ja nicht immer C sein).
Verzeichnisse:
0 = Windows
1 = System (normal das System32)
2 = Temp
 
Hallo
Erstmal danke für den Code jedoch gibt es da ein kleines Problem

Private Sub Command3_Click()
Dim Pfad1 As String
Dim Pfad2 As String
Dim Pfad As String
Pfad1 = "C:\Windows\system32\drivers\etc\hosts"
Pfad2 = "C:\WINNT\system32\drivers\etc\hosts"
If Dir(Pfad1) Then
Pfad = Pfad1
else if Dir(Pfad2) then
Pfad = Pfad2
Else
'Datei existiert weder im ersten noch im zweiten Pfad.
End If

End Sub

da sagt er mir beim starten Syntax fehler und wie binde ich dort noch ein wenn er die Datei im 1. oder 2. Pfad findet dass er dort dann etwas reinschreibt?
Danke im Vorraus Gruss Patrick
 
Ich hab einen Syntaxfehler bei meinem Code drin, ElseIf wird zusammen geschrieben.
Schreib doch bitte immer dazu in welcher Zeile oder bei welcher Anweisung ein Fehler auftritt, dann geht die Fehlersuche schneller.

Ich kann dir empfehlen ein Einsteigertutorial zu VB durchzuarbeiten oder ein Buch zu kaufen.
z.B. dieses Tutorial hier

Wenn du den richtigen Pfad in der Variablen Pfad stehen hast kannst die Datei so öffnen:
Code:
Open Pfad for ... 'Rest der Open-Anweisung
Also einfach anstatt einem konstanten String die Variable einsetzen.

Würde dir aber empfehlen das System-Verzeichnis wie oben beschrieben dynamisch zu ermitteln, weil es ja nicht immer unter dem angegebenen Pfad liegen muss.
 
Danke für die Hilfe mit dem von dir angegeben tutiral habe ich mich schon ein wenig befasst und da musst noch ein syntax fehler drin sein und zwar

Private Sub Command3_Click()
Dim Pfad1 As String
Dim Pfad2 As String
Dim Pfad As String
Pfad1 = "C:\Windows\system32\drivers\etc\hosts"
Pfad2 = "C:\WINNT\system32\drivers\etc\hosts"
If Dir(Pfad1) Then
Pfad = Pfad1
ElseIf Dir(Pfad2) Then
Pfad = Pfad2
Else
'Datei existiert weder im ersten noch im zweiten Pfad.
End If

End Sub

Er meldet mir in der 7. Zeile bei If Dir(Pfad1) Then
einen Syntax fehler !
Was das dynamische angeht das Programm soll für viele user sein die haben doch nich alle das WSH drauf oder ist das bei der windows installation mit enthalten?
Gruss Patrick
 
Hab da jetz mit dem dynamischen bischen rumgespielt und es funct grossartig mein code sieht jetz so aus

Private Sub Command3_Click()
Dim FSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Pfad1 = FSO.GetSpecialFolder(1) & "\drivers\etc\hosts"
Open Pfad1 For Output As #1
Print #1, "127.0.0.1 localhost"
Print #1, "69.0.197.152 noxchat.westwood.com"
Close #1
End Sub

Danke für die Hilfe ich werd mich im html Forum versuchen zu angachieren
Gruss Patrick
 
Hab den Fehler mit Dir() gefunden.
Das muss natürlich
if Dir("Pfad")<>"" heißen, weil Dir() ja den Pfad der gefundenen Datei(en) zurückgibt.
Wenn ein String ungleich einem leeren String zurückkommt hat er etwas gefunden das dem Suchmuster entspricht.

Ja du hast schon recht das nicht alle das WSH installiert haben (bei ME, 2K, XP normal vorinstalliert, 98 weiß ich nicht, 95 muss von Hand runtergeladen werden) aber wieviele werden ihr Windows in "C:\Windows" haben ?
Es kann ja auf einer anderen Platte liegen, oder Winnt, Win98, WinXP, etc. heißen.

Wenn du ohne WSH arbeiten willst könntest du versuchen im Pfad die Umgebungsvariablen zu verwenden.
z.B. %windir% für das Windowsverzeichnis.
Aber da weiß ich nicht ob es eine Einheitliche Variable für alle Versionen gibt und hab nicht getestet ob man die mit der Dir()-Funktion ansprechen kann.

Und ganz wichtig:
Bei deiner Open-Anweisung wird alles was bisher in der Datei steht überschrieben. Wenn du die Datei mit Append öffnest bleibt der bisherige Inhalt bestehen.
 
Zuletzt bearbeitet:
Aso gut zu Wissen aber habe ja aufm Install button die standard host url und die neue ip für die server
und auf dem deinstall schreibt er halt nur wieder die normale host url aber trotzdem danke für den tipp
Gruss Patrick
 
Zurück