RunProgram - Sicherheitsabfrage of File existiert

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ironsmurf
Beiträge: 111
Registriert: 04.01.2006 12:57
Computerausstattung: AMD FX(tm)-6300 Six-Core Processor
3.50 GHz / 8 GB Ram
Windows 7 / 64bit / Ultimate
Purebasic 5.20 LTS (Windows - x86)
Wohnort: Deutschland

RunProgram - Sicherheitsabfrage of File existiert

Beitrag von Ironsmurf »

Hallo zusammen
Ich möchte gerne mein Programm spitten in einzelne Dateien um es übersichtlicher zugestalten, dazu gehört auch das starten anderer Programme.
Da ich blutiger Anfänger bin, habe ich das mit dem RunProgram-Befehl hinbekommen, aber wie muß der Quelltext geschrieben sein, damit KEINE Fehlermeldung auftaucht, wenn die Datei NICHT existiert ?

Vielen Dank für eure Hilfe im voraus

Code: Alles auswählen

;Play the Movies
If RunProgram("D:\Anwendungen\MAX Butler\Start - Movies\"+Eingabe$+"")
PrintN("")
ConsoleColor(12,0)
PrintN("Es wird ca. 10 Sekunden bis zum Filmstart dauern.")
endif

PS:Die 10 Sekunden werden benötigt um durch die externe Datei, das serielle Relais zuschalten und die USB-Platte zu initialisieren, bevor der Film gestartet werden kann
EndIf
Es kommt immer auf die Sichtweise des Betrachters an.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

Procedure FileExists(szFileName.s)
  Protected Result.l, Find.WIN32_FIND_DATA
  Result = FindFirstFile_(@szFileName,Find)
  FindClose_(Result)
  If Result <> #INVALID_HANDLE_VALUE
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

;Play the Movies
MyProgram.s = "D:\Anwendungen\MAX Butler\Start - Movies\" + Eingabe$

If FileExists(MyProgram) And RunProgram(MyProgram)
  PrintN("")
  ConsoleColor(12,0)
  PrintN("Es wird ca. 10 Sekunden bis zum Filmstart dauern.")
Else
  PrintN("")
  ConsoleColor(12,0)
  PrintN("Den Film finde ich nicht ;(")
EndIf
Wenn Du allerdings auch Linux oder MacOS verwenden möchtest, solltest Du die Existenz lieber mit FileSize checken.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Re: RunProgram - Sicherheitsabfrage of File existiert

Beitrag von Joel »

Ironsmurf hat geschrieben:Da ich blutiger Anfänger bin,
Nachmacher, http://www.purebasic.fr/german/viewtopi ... 1547#91547
aber gut dass meine ausdrückre durch die welt gehen. :lol: :mrgreen:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Re: RunProgram - Sicherheitsabfrage of File existiert

Beitrag von Kaeru Gaman »

Joel hat geschrieben:meine ausdrücke
...wir haben schon "blutiger Anfänger" gesagt, da warst du noch flüssig.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Was ist denn der Vorteil der Api-Version gegenüber FileSize() ?
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

HeX0R hat geschrieben:Was ist denn der Vorteil der Api-Version gegenüber FileSize() ?
FileSize öffnet die Datei, was unnötig ist und länger dauert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag von HeX0R »

Also ich bekomme folgende Ausgabe mit dem nachfolgenden Code:

---------------------------
Info
---------------------------
Files Scanned: 34307
Api Found-Files:34307
Api-Version: 5.88sec.
PB Found-Files:34307
PB-Version: 5.86sec.
---------------------------
OK
---------------------------

Hier der kleine Testcode:

Code: Alles auswählen

Procedure FileExists(szFileName.s)
  Protected Result.l, Find.WIN32_FIND_DATA
  Result = FindFirstFile_(@szFileName,Find)
  FindClose_(Result)
  If Result <> #INVALID_HANDLE_VALUE
    ProcedureReturn #True
  EndIf
  ProcedureReturn #False
EndProcedure

Global NewList FileOrNoFile.s()

Procedure.l SearchAll(Path.s)

	Count.l = 0
	Dir.l   = ExamineDirectory(#PB_Any, Path, "")
	If Dir
		While NextDirectoryEntry(Dir)
			Select DirectoryEntryType(Dir)
				Case #PB_DirectoryEntry_Directory
					If DirectoryEntryName(Dir) <> "." And DirectoryEntryName(Dir) <> ".."
						Count + SearchAll(Path + DirectoryEntryName(Dir) + "\")
					EndIf
				Case #PB_DirectoryEntry_File
					;correct File
					AddElement(FileOrNoFile())
					FileOrNoFile() = Path + DirectoryEntryName(Dir)
					Count + 1
					;create a random Filename (i guess it won't exist)
					AddElement(FileOrNoFile())
					a$ = ""
					For j = 1 To 5
						a$ + Chr(Random(25) + 65)
					Next j
					FileOrNoFile() = Path + a$ + ".txt"
			EndSelect
		Wend
		FinishDirectory(Dir)
	EndIf
	ProcedureReturn Count
	
EndProcedure

Count = SearchAll("C:\")
S1    = ElapsedMilliseconds()
D1    = 0
ForEach FileOrNoFile()
	If FileExists(FileOrNoFile())
		D1 + 1
	EndIf
Next
S1 = ElapsedMilliseconds() - S1

S2 = ElapsedMilliseconds()
D2 = 0
ForEach FileOrNoFile()
	If FileSize(FileOrNoFile()) > -1
		D2 + 1
	EndIf
Next
S2 = ElapsedMilliseconds() - S2

MessageRequester("Info", "Files Scanned: " + Str(Count) + #LF$ + "Api Found-Files:" + Str(D1) + #LF$ + "Api-Version: " + StrF(S1 / 1000, 2) + "sec." + #LF$ + "PB Found-Files:" + Str(D2) + #LF$ + "PB-Version: " + StrF(S2 / 1000, 2) + "sec.")

Da scheints also nicht wirklich Geschwindigkeitsunterschiede zu geben.
Hätte mich auch gewundert...
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Getested hab ich es nicht, ich nutze es trotzdem lieber, weil ich des öfteren
Probleme hatte, unmittelbar nach FileSize, dieselbe Datei zu öffnen. Oftmals
war einfach noch kein Zugriff möglich. Meine Festplatten laufen alle
Busmastered.
Wer lieber FileSize nutzt, soll dies tun :wink:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Joel
Beiträge: 851
Registriert: 21.04.2006 19:22

Beitrag von Joel »

:lol: :lol: stimmt!
:lol:
Antworten