the snake II
Erfahrenes Mitglied
Hallo zusammen,
ich habe von MSDN ein kleines Programm, das den Inhalt eines Ordners ausliest.
Es arbeitet auf Win98 als Consolen Anwendung.
Ich habe es so umgeschrieben, dass es ein anderes Programm startet, welches dafür zuständig ist, die Datei zu Drucken.
Das funktioniert alles wunderbar, nur wenn in dem Ordner keine Dateien vorhanden sind, tritt die Eigenschaft des MS-DOS Befehls "del" auf, die bei Übergabe von "del .\jobs\" (was ja übergeben wird, wenn keine Datei vorhanden ist), eine Abfrage einletet die etwa so aussieht:
"Sollen alle Dateien im Verzeichnis gelöscht werden?(J/N) "
Da diese Anwendung auf einem Server laufen soll, der über keinen Monitor verfügt, ist das etwas hinderlich, denn diese prozedur wird von einem dritten Programm alle 30 Sekunden neu gestartet. Wenn jetzt die Abfrage dort steht wird alles angehalten.
Zur Erklärung: Das Druckprogramm ist dazu gedacht, einen nicht-WinXP fähigen Drucker auf WinXP zu nutzen. Dazu wurde er auf einem Win98 Rechner installiert. Dazu hab ich ein Programm draufgemacht, das in der DOS-Eingabeaufforderung PostScript Dateien drucken kann. Möchte man nun von WinXP aus ein Dokument drucken, dann klickt man auf drucken und es wird eine PostScript Datei erzeugt und im "jobs" Verzeichnis auf dem Win98 Rechner abgelegt. Ein Programm ruft alle 30 Sekunden ein anderes Programm auf, welches im "jobs" Verzeichnis per "FindFirstFile" jede dort befindliche Datei an das Druckprogramm sendet.
Ist die Datei gedruckt (bzw. sind 30 Sekunden Vergangen) soll die Datei gelöscht werden.
Da ich nicht weiß, wie man mit C++ Dateien löscht, habe ich eben den "del" Befehl von MS-DOS benutzt. Da tritt eben das oben genannte Problem auf.
Hier mein Programm:
Eigentlich sollte doch bei der if-Abfrage geklärt werden, ob eine Datei gefunden wurde, oder nicht?
Hat jemand eine Lösung für mich?
ich habe von MSDN ein kleines Programm, das den Inhalt eines Ordners ausliest.
Es arbeitet auf Win98 als Consolen Anwendung.
Ich habe es so umgeschrieben, dass es ein anderes Programm startet, welches dafür zuständig ist, die Datei zu Drucken.
Das funktioniert alles wunderbar, nur wenn in dem Ordner keine Dateien vorhanden sind, tritt die Eigenschaft des MS-DOS Befehls "del" auf, die bei Übergabe von "del .\jobs\" (was ja übergeben wird, wenn keine Datei vorhanden ist), eine Abfrage einletet die etwa so aussieht:
"Sollen alle Dateien im Verzeichnis gelöscht werden?(J/N) "
Da diese Anwendung auf einem Server laufen soll, der über keinen Monitor verfügt, ist das etwas hinderlich, denn diese prozedur wird von einem dritten Programm alle 30 Sekunden neu gestartet. Wenn jetzt die Abfrage dort steht wird alles angehalten.
Zur Erklärung: Das Druckprogramm ist dazu gedacht, einen nicht-WinXP fähigen Drucker auf WinXP zu nutzen. Dazu wurde er auf einem Win98 Rechner installiert. Dazu hab ich ein Programm draufgemacht, das in der DOS-Eingabeaufforderung PostScript Dateien drucken kann. Möchte man nun von WinXP aus ein Dokument drucken, dann klickt man auf drucken und es wird eine PostScript Datei erzeugt und im "jobs" Verzeichnis auf dem Win98 Rechner abgelegt. Ein Programm ruft alle 30 Sekunden ein anderes Programm auf, welches im "jobs" Verzeichnis per "FindFirstFile" jede dort befindliche Datei an das Druckprogramm sendet.
Ist die Datei gedruckt (bzw. sind 30 Sekunden Vergangen) soll die Datei gelöscht werden.
Da ich nicht weiß, wie man mit C++ Dateien löscht, habe ich eben den "del" Befehl von MS-DOS benutzt. Da tritt eben das oben genannte Problem auf.
Hier mein Programm:
Code:
#define _WIN32_WINNT 0x0400
#include <windows.h>
#include <stdio.h>
#include <string>
using namespace std;
string delquery;
string delprequery = "del ";
string argument;
string query_pre = "C:\\gs\\gsview\\gsprint .\\jobs\\";
string query;
int main(int argc, char *argv[])
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
printf ("Gefundene Datei: %s.\n", argv[1]);
hFind = FindFirstFile(argv[1], &FindFileData);
if (hFind == INVALID_HANDLE_VALUE)
{
printf ("Invalid File Handle. GetLastError reports %d\n",
GetLastError ());
return (0);
}
else
{
argument = FindFileData.cFileName;
delquery = delprequery + argument;
query = query_pre + argument;
system(query.c_str());
Sleep(30000);
system(delquery.c_str());
FindClose(hFind);
return (1);
}
}
Hat jemand eine Lösung für mich?