if FileExist () funktioniert nicht?!? Topic is solved

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

ComTols

if FileExist () funktioniert nicht?!?  Topic is solved

14 Jun 2018, 07:31

Hallo,
ich habe folgendes Problem: Ich möchte ein Programm schreiben, das auf Tastendruck einen Sound abspielt. Zusätzlich möchte ich eine GUI programmieren, mit der ich die Pfade der Dateien und den dazugehörigen Hotkey definieren kann.
Das soll dann permanent in eine .txt-Datei geschrieben werden, sodass ich es mit einem anderen Script einlesen und ausführen lassen kann. Der Sinn hinter 2 Skripts ist halt der, dass ich das Skript mit den Hotkeys in den Autostart legen kann und das Skript für die GUI separat ausführen lassen kann.

Soweit, so gut. Also habe ich begonnen das GUI-Skript zu schreiben, aber aus irgendeinem Grund führt er den Befehlt
  • if FileExist(DateiName)
nicht richtig aus. Egal, ob die Datei im Verzeichnis existiert oder nicht, das Programm gibt immer aus, die Datei existiert bereits und springt sofort weiter.

Zum Verständnis hier mal das komplette Label:

Code: Select all

Speichern: ;Dieses Label wird aufgerufen, sobald ich im GUI auf Speichern geklickt habe.
global HKN ;Diese Variable gibt die Anzahl der Durchlaufe der if-Schleife aus und ist gleichzeitig die Nummer der zu speichernden Datei.

Name:
HKN++
DateiName := "Hotkey" . HKN . ".txt" ;Die Datei Soll in dem Format Hotkey1.txt, Hotkey2.txt, Hotkey3.txt, usw. benannt werden.

if FileExist(DateiName) goto, Existiert ;Wenn bereits Hotkey1.txt existiert soll das Programm die Zahl um eins erhöhen und erneut Prüfen. Solange, bis das Programm bei 20 angekommen ist.
if !FileExist(DateiName) goto, ExistiertNicht ;Wenn die Datei Hotkey1.txt (usw.) noch nicht existiert, soll diese erstellt werden.


Existiert:

if (HKN > 20) {
	Fehler = true
	goto, GuiClose ;Sobald 20 erreicht wurde wird ein Fehler ausgegeben und das Programm geschlossen. Die Fehlermeldung ist im Label "GuiClose" beschrieben.
	;Später soll hier gefragt werden, ob ein bereits bestehender Hotkey ersetzt werden soll, aber soweit bin ich noch nicht...
} else {
	goto, Name ;Sollte 20 noch nicht erreicht sein soll das Programm erneut prüfen.
} 
return

ExistiertNicht:

if (Pfad1 = "") { ;Es wird geprüft, ob der Datei-Pfad angegeben wurde.
		Fehler = true ;Es wird ein Fehler ausgegeben.
		if (Hotkey1 = "") { ;Wenn der Datei-Pfad nicht angegeben wurde, wird zusätzlich geprüft, ob der Hotkey geändert wurde.
			MsgBox, Bitte geben Sie einen Dateipfad und einen Hotkey an! ;Wenn sowohl Hotkey, als auch DateiPfad nicht geändert wurden, wird der Benutzer darauf hingewiesen.
		} else {
			MsgBox, Bitte geben Sie einen Dateipfad an! ;Wenn nur der Datei-Pfad nicht geändert wurde, wird der Benutzer darauf hingewiesen.
		}
	
	} else {

		if (Hotkey1 = "") { ;Es wird geprüft, ob der Hotkey geändert wurde.
			MsgBox, Bitte geben Sie einen Dateipfad und einen Hotkey an! ;Wenn der Hotkey nicht geändert wurde, wird der Benutzer darauf hingewiesen.
			Fehler = true ;Es wird ein Fehler ausgegeben.
		} else {
			Fehler = false ;Es ist kein Fehler aufgetreten.
			;Sowohl Datei-Pfad als auch Hotkey wurden geändert. Das Programm fährt mit der Abspeicherung fort :
			Text = %Hotkey1%:: SoundPlay, %Pfad1% ;Es wird eine Variable definiert, die den Text, welcher in die permanente Datei geschrieben werden soll, enthält. So erspart man sich unnötige Formatierung.
			FileAppend, %Text% , %DateiName% ;Der formatierte Text wird in einer Datei permanent gespeichert.
			MsgBox, Datei erstellt.
		}
	}
So weit also. Das Problem habe ich ja bereits beschrieben. Zum Verständnis: Die Variable "Hotkey1" beinhaltet den bereits formatierten Hotkey, die Variable "Pfad1" beinhaltet den Pfad der Datei. Der Rest sollte selbsterklärend sein, habe ja auch alles Kommentiert.

Die Datei ist übrigens im Selben Ordner wie das Skript. Also wo liegt da mein Fehler? Bitte um Hilfe...

Vielen Dank im Voraus
User avatar
nnnik
Posts: 3371
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: if FileExist () funktioniert nicht?!?

14 Jun 2018, 11:14

Man kann soweit ich weiss keinen ausführbaren Code direkt in die selbe Zeile wie das If schreiben.
Und aufgrund der Art und weise wie der AutuHotkey tokenizer wird dein ganzer Code von AutoHotkey so gesehen:

Code: Select all

if (FileExist(DateiName) goto, Existiert) ;Wenn bereits Hotkey1.txt existiert soll das Programm die Zahl um eins erhöhen und erneut Prüfen. Solange, bis das Programm bei 20 angekommen ist.
	if (!FileExist(DateiName) goto, ExistiertNicht) ;Wenn die Datei Hotkey1.txt (usw.) noch nicht existiert, soll diese erstellt werden.
		if (HKN > 20) {
			Fehler = true
			goto, GuiClose ;Sobald 20 erreicht wurde wird ein Fehler ausgegeben und das Programm geschlossen. Die Fehlermeldung ist im Label "GuiClose" beschrieben.
			;Später soll hier gefragt werden, ob ein bereits bestehender Hotkey ersetzt werden soll, aber soweit bin ich noch nicht...
			} 
	else { ;ich weiß ehrlich gesagt nicht für welches if AutoHotkey dieses Else aufruft
		goto, Name ;Sollte 20 noch nicht erreicht sein soll das Programm erneut prüfen.
	} 
return
Recommends AHK Studio

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 6 guests