Thread WIN32::GUI Problem mit Systemaufrufe: Datei lesen nach ShellExecute geht nicht
(4 answers)
Opened by OliverW at 2006-08-04 04:08
Hallo,
ich möchte unter einer WIN32::GUI Oberfläche etwas ganz einfaches tun, nämlich Daten in eine Datei (z.B. in.txt) zu schreiben, diese Datei von einem Program bearbeiten lassen, welches seine Ergebnisse in eine weitere Datei (z.B. out.txt) ausgibt, die dann wiederum von der Oberfläche eingelesen wird um weiteres damit anzustellen. Den Aufruf des Programs könnte man mit system, oder qx, etc. machen, was dann auch funktioniert, nur das sich kurz so ein lästiges Windowsfenster öffnet und wieder schliesst, was halt gar nicht so dolle wirkt... WIN32::GUI bietet die Routine ShellExecute, welche mit einem Parameter erlaubt das Fenster zu unterdrücken. Das funktioniert auch schön, nur das jetzt das Dateieinlesen nach dem Programaufruf nicht mehr funktioniert. Nach langen rummachen und ausprobieren scheint mir das Problem darin zu liegen, dass die frisch generierten Daten der Ausgabedatei zu dem Zeitpunkt wo diese von der Perl-Oberfläche wieder eingelesen wird aus irgendeinem Grund noch nicht zur Verfügung stehen. Statt dessen werden die alten Daten eingelesen... Als einzigste Lösung, die ich bisher, trotz viel Recherche, gefunden habe, ist zwischen dem Programaufruf und dem Einlesen der Ausgabedatei lange genug zu warten, z.B. mittels eines sleep(1), was dann halt nervig langsam ist... Meine Frage, weis jemand eine vernünftige Lösung (vernünftig in dem Sinne das kein Fenster erscheint und man nicht ewig warten muss)? Gibt es z.B. eine Möglichkeit rauszufinden wann die aktuellen Daten eingelesen werden können, oder zu erzwingen das sie zur Verfügung stehen? Tausend Dank, Olli Diese Informationen sind vielleicht noch nützlich. Das Program heisst bei mir owH_extract.exe, und benötigt als Parameter die Eingabe- und Ausgabedatei (also z.B. owH_extract in.txt out.txt). Ich habe es mit C geschrieben. Das commit-to-disk flag wurde gesetzt, und for dem fclose() habe ich extra noch einen expliziten fflush(). Das ist aber eigentlich alles nicht wichtig weil das Problem nicht beim Program zu liegen scheint... perl -v liefert This is perl, v5.8.7 built for MSWin32-x86-multi-thread (with 7 registered patches, see perl -V for more detail) Copyright 1987-2005, Larry Wall Binary build 813 [148120] provided by ActiveState http://www.ActiveState.com ActiveState is a division of Sophos. Built Jun 6 2005 13:36:37 Und zu guter, noch ein kleines Progrämchen um die Problemstellung auch anhand von Code nachvollziehbar zu machen. Es wird bei Euch nicht funktionieren weil Ihr owH_extract nicht habt, aber jedes andere Program welches eine Datei einliest und eine Neue ausgibt sollte es tun. #Beispielprogram Code: (dl
)
1 use strict; <!--EDIT|esskar|1154652085--> |