Autor |
Beitrag |
validas
      
Beiträge: 35
WinXP, Win7
Microsoft Visual Studio 2010
|
Verfasst: Di 13.09.11 11:16
Hallo miteinander,
In meinem Programm rufe ich ein externes Programm auf, welches mir ein file (transferOk.txt) in ein Verzeichnis kopiert, sofern der vorgang erfolgreich war. nun darf ich in meinem zu programmierenden Programm aber erst fortfahren, wenn dieses file tatsächlich auch vorhanden ist. dies wäre ja nicht das problem, aber es kann 6min dauern, bis die Datei vorhanden ist, es ist aber auch möglich dass dies schon nach 20s geschehen ist... also variabel... Wie könnte ich das realisieren? ich habe mir gedacht, ich schreibe eine methode, welche alle 5s schaut, ob das file nun vorhanden ist. falls es vorhanden ist, fahre fort, und falls nicht, warte nochmals 5s und schau nochmals.....
was meint ihr dazu? ist dies irgendwie so möglich? gibts andere varianten?
wie würdet ihr das machen mit diesem Zeitintervall?
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 13.09.11 11:19
Ich denke, es wäre sinnvoller, zu warten, bis das externe Programm mit dem Kopieren fertig ist.
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
validas 
      
Beiträge: 35
WinXP, Win7
Microsoft Visual Studio 2010
|
Verfasst: Di 13.09.11 11:20
wie meinst du das? blick ich nicht ganz durch... könntest du mir ein beispiel geben?
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 13.09.11 11:24
Wenn du ein externes Programm aus deiner Anwendung heraus startest, dann kannst du dein Programm mit der weiteren Ausführung solange warten lassen, bis das externe Programm fertig ist. Das externe Programm gibt dir dabei einen Returncode zurück (idealerweise "alles ok").
Ganz fix mit Google gesucht:
www.eggheadcafe.com/...n-ende-abwarten.aspx
www.tutorials.de/net...sgabe-auswerten.html
_________________ Delphi: XE - OS: Windows 7 Professional x64
Für diesen Beitrag haben gedankt: storestore, validas
|
|
validas 
      
Beiträge: 35
WinXP, Win7
Microsoft Visual Studio 2010
|
Verfasst: Di 13.09.11 11:26
Vielen Dank, genau sowas habe ich gesucht!
Wenn man weiss nach was man sucht, so findet man es auch schneller 
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Di 13.09.11 11:30
Ach ja, als Ergänzung:
Die Lösung mit der "TransferOk"-Datei ist sinnvoll bei Programmen, die etwas in ein - sagen wir mal - FTP Verzeichnis ablegen, wo du über Netzwerk oder Internet nicht feststellen kannst, ob das Programm die Nutzdaten schon vollständig geschrieben hat.
Wenn du das externe Programm aber ohnehin selbst aus deiner lokalen Anwendung heraus startest, dann kannst du wie oben gesehen feststellen, ob das Programm noch läuft oder nicht. Dann ist eine solche "OK"-Datei nicht zwingend notwendig.
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
C#
      
Beiträge: 561
Erhaltene Danke: 65
Windows 10, Kubuntu, Android
Visual Studio 2017, C#, C++/CLI, C++/CX, C++, F#, R, Python
|
Verfasst: Mi 14.09.11 22:57
Ob das so klappt wie du dir das vorstellst bezweifle ich. Denn wenn das Programm wartet bis das andere geschlossen ist und das Andere nur schließt wenn "Alles OK" ist, wie willst du dann überprüfen ob ein Fehler vorliegt? Du hast ja keine konstante Ausführungsdauer für die andere Anwendung... Wenn man das jetzt ohne Dateien regeln will muss man mit Prozesskommunikation arbeiten und dass könnte doch noch mal ordentlich Arbeit bedeuten, wenn man sich erst einarbeiten muss. Dann kann er gleich mit Dateien arbeiten.
_________________ Der längste Typ-Name im .NET-Framework ist: ListViewVirtualItemsSelectionRangeChangedEventHandler
|
|
Christoph1972
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Do 15.09.11 07:11
Ist das externe Programm zum Kopieren zwingend notwendig? Kannst du das nicht selbst übernehmen, dann hättest du alles unter Kontrolle, und müsstest nicht mit Timern usw. handtieren?
_________________ Gruß
Christoph
|
|
validas 
      
Beiträge: 35
WinXP, Win7
Microsoft Visual Studio 2010
|
Verfasst: Do 15.09.11 15:07
Das "Externe Programm" erstellt ein Image einer Compact Flash. Es MUSS zwingend alleine ausgeführt werden. Wenn das Progi dann fertig ist, wird eine Datei in ein Verzeichnis geschaufelt.. ich dachte mir, ich könne warten bis die Datei angelegt wurde, und danach weiterfahren.. ist denn sowas gar nicht möglich? Ich hoffe schon... sonst sind etliche stunden falsch investiert worden... =(
|
|
Horschdware
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: Do 15.09.11 16:00
validas hat folgendes geschrieben : | Es MUSS zwingend alleine ausgeführt werden. |
In wie fern "alleine" ausgeführt werden?
Benötigt dieses Programm eine Benutzereingabe?
Schliesst es sich selbständig, wenn es fertig ist?
Was macht es im Fehlerfall?
Zu dem Image der Flash Karte: Ist das dann einfach ein komprimiertes Archiv der Nutzdaten oder enthält das Image zusätzliche Daten, vergleichbar einem CD Image?
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
validas 
      
Beiträge: 35
WinXP, Win7
Microsoft Visual Studio 2010
|
Verfasst: Do 15.09.11 16:33
Also.
In meiner Firma bin ich damit beauftragt worden, ein programm zu schreiben, der automatisch die Softwarereleases die ein Entwickler gemacht hat, richtig auf den Abgabelaufwerken abgelegt wird. Diese Software werden nicht nur von entwicklern gebraucht, sondern auch von Kundendienstmitarbeitenden, die regelmässig an den maschinen der Kunden Updates durchführen müssen. Da diese keine Ahnung haben wie eine Compact flash gebruzelt wird, und auch über keine entsprechende programmierumgebung besitzen, wird die Software mit einem Batch zum brennen der Compactflash abgelegt. Sprich: Die Programmierumgebung stellt ein tool zur verfügung, welches zuerst ein Image schnippselt, und danach aus diesem Image ein Batch generiert, den sogenannten Batchdownload. Dieser wird dann abgelegt. Da unser Softwarefachteam wünscht, dass sie nach einem Compile ihres Projektes nur noch mein tool starten müssen, und die Software wird dann automatisch korrekt abgelegt. Dies ist alles möglich, aber um das Image zu kriegen und daraus einen Batch zu kreieren, muss das Programm gestartet werden. Dieses interpretiert einige zeilen code, die in einem .pil datei stehen. die .pil datei ist einfach zu erstellen, das ist nicht das problem... aber ich sollte ja wissen, wann mein progi weiterfahren kann, und dass kann es erst wenn das externe progi fertig ist. wenn es fertig ist, dann schaufelt es ein textfile in ein verzeichnis... ach ja, das externe progi benötigt ein manuelles ausführen.
ich hoffe ich habe euch nicht allzu fest verwirrt...
müsste ja wirklich nur wissen, wie ich feststellen kann, ob diese blöde datei endlich in diesem Verzeichnis landet... :S
Falls das schlicht nicht möglich ist, werde ich mein progi wohl kübeln müssen... hoffe eigentlich nicht!
|
|
Christoph1972
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Do 15.09.11 16:49
Was ist das für ein Laufwerk? Es gibt ja auch noch die FileSystemWatcher Klasse.
_________________ Gruß
Christoph
Für diesen Beitrag haben gedankt: validas
|
|
validas 
      
Beiträge: 35
WinXP, Win7
Microsoft Visual Studio 2010
|
Verfasst: Do 15.09.11 16:54
Danke Christoph,
das ist perfekt! genau das! DAS!!!
wieder einmal ein Beweis dafür, wie wunderbar c# ist! Komplizierte Dinge so einfach wie atmen!!
Vielen Dank auch den anderen!
|
|
Christoph1972
      
Beiträge: 690
Erhaltene Danke: 16
VS2015 Pro / C# & VB.Net
|
Verfasst: Do 15.09.11 20:20
Das funktioniert aber nur eingeschränkt. Wenn es ein Laufwerk auf einem Server ist, kann es gut sein das es nicht geht. Auf einem Novell Server funktioniert es definitiv nicht. Es geht auch nicht mit allen Windows Servern, da musst du dich ggf. einlesen bevor du loslegst.
Gruß
Christpoh
_________________ Gruß
Christoph
|
|