Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mit C prüfen ob eine Datei von einem anderen Programm geöffnet ist...

Frage Entwicklung C und C++

Mitglied: Fips81

Fips81 (Level 1) - Jetzt verbinden

04.05.2007, aktualisiert 05.05.2007, 8506 Aufrufe, 2 Kommentare

Einen schönen guten Morgen!

Ich muss über VPN drucken. Da der Druckjob bei Bildern und Texten mit Mustern im spooler so endlos groß wird, und ThinPrint meinem Kunden zu teuer ist, versuche ich das mittels PDF umzusetzen. Auf dem Server wandelt FreePDF die Druckausgabe in ein PDF-File um und legt sie auf einer Freigabe auf dem Heimcomputer ab. Dort überwacht DirMonitor dieses Verzeichnis. Wenn eine PDF-Datei eingeht, leitet DirMonitor diese an (dazwischen eine Batch) PDFP.exe weiter. PDFP druckt diese mittels AcrobatReader v8.0 und schließt den Reader nach erfolgreichem Spoolvorgang.
Soweit funktioniert das auch prima, nur wenn die PDF-Datei "größer" ist, d.h. über 100 kb, dann erkennt DirMonitor die PDF (die aber noch leer ist und durch den langsamen DSL-Upload erst noch gefüllt wird) und leitet die leere Datei an PDFP weiter. Mit dem Ergebnis, das eine Instanz vom Acrobat Reader geöffnet ist und sich nicht mehr schließt, und auch der Druck nicht funktioniert.
Hoffentlich habe ich das verständlich rüber gebracht.

Ich brauche quasi ein Programm, das überprüft, ob die PDF-Datei noch geöffnet ist. Z.B. mittels einem Schreibversuch. Mein erster Fehlversuch war eine Batch:

01.
@echo off 
02.
c:/ 
03.
cd pdfprint/pdfspooler 
04.
for /F "tokens=1,2,3,4 delims=" %%i in (%1) do @set pdffilename="%%l" 
05.
c:/pdfprint/wait.exe 1 
06.
:loop 
07.
ren %pdffilename% %pdffilename% 
08.
if errorlevel 0 goto print 
09.
c:/pdfprint/wait.exe 3 
10.
if errorlevel 1 goto loop 
11.
:print 
12.
c:/pdfprint/pdfp.exe %1 
13.
del %1 /f /s /q
DirMonitor startet die Batch so:
"C:/PDFPrint/PDFP.exe" "C:/PDFPrint/PDFSPOOLER/test.pdf"

Die For-Schleife holt aus "C:/PDFPrint/PDFSPOOLER/test.pdf" den Dateinamen "test.pdf" mit Anführungszeichen.

Mein Gedanke war, andauernd zu versuchen die Datei umzubenennen (in den selben Namen) und mit errorlevel zu arbeiten. So lange die Datei "befüllt" wird, soll errorlevel 1 kommen. Mit rename funktioniert das auch, wenn ich die Schritte einzeln in der Kommandozeile durchgehe, aber in der Batch nicht mehr.

Jetzt brauche ich eine Lösung mittels eines Kommandozeilen-Befehls um den errorlevel zu erzeugen, oder lieber wäre es mir mittels eines C-Programms (deswegen habe ich es in der Rubrik C/C++ gepostet).
Ich bin gerade dabei C zu lernen und kenne nur die Grundlagen. Habe mir bereits folgendes Progrämmchen gebastelt:

01.
#include <stdio.h> 
02.
#include <stdlib.h> 
03.
int main (int argc, char *argv[])  
04.
05.
      FILE *datei; 
06.
      datei = fopen ( argv[1] , "w+" ); 
07.
      if (datei == NULL ) { 
08.
                          return EXIT_FAILURE; 
09.
10.
      else { 
11.
           return EXIT_SUCCESS; 
12.
13.
}
Das Programm erzeugt den errorlevel 1 aber nur wenn es die Datei nicht erstellen kann. Da sie aber schon existiert muss das Programm irgendwie erkennen, ob die Datei vollständig ist, bzw. nicht mehr durch Windows geöffnet ist.

Genau... Windows... eben hab' ich es erwähnt. Betriebssystem ist Windows XP. ;)

Für eine Lösung bin ich riesig dankbar!

Mfg, Michael

PS: Entschuldigung für den langen Text!


edit: WO SIND DIE BACKSLASHE? Ich musste sie durch slashs ersetzen, ich kriegs nicht hin.
Mitglied: Guenni
04.05.2007 um 19:01 Uhr
@Fips81

Hi,

der Datentyp FILE ist ja eine Struktur. Unter anderem enthält
diese Struktur ein Dateiende- und ein Fehler-Flag:

01.
typedef struct{ 
02.
 
03.
... 
04.
 
05.
unsigned int flags; /* Dateiende- und Fehlerflag */ 
06.
 
07.
... 
08.
 
09.
}FILE;
Fehler können mit der Funktion int ferror(FILE* f) abgefragt werden. Die Funktion
liefert einen Wert ungleich Null, wenn in(mit) f ein Fehler aufgetreten ist.

Habe ich gerade mal nachgeschlagen, aber WELCHE Fehler das sein könnten,
steht leider nicht in dem Buch.

Ich würde mir 2 Programme schreiben:

Eins, das eine Datei öffnet, und in einer Schleife die Datei mit Werten füllt.

Ein anderes, das die Datei ebenfalls öffnet(öffnen will), während das erste
Programm noch läuft, und dann mal gucken, was passiert.

Ist ein bißchen TRYandERROR, aber manchmal muß man halt ein
wenig experimentieren.

Grüße
Günni
Bitte warten ..
Mitglied: Fips81
05.05.2007 um 01:08 Uhr
Hi Günni, riesen Dank für Deine Mühen!

Ich denke, damit kann ich mir weiteres Wissen zu ferror ergoogeln.

Heute Abend habe ich es soweit zum laufen gebracht. Halt mit Batch, aber es erfüllt seinen Zweck.
Schaun mer mal, vielleicht kann ich's nächste Woche noch ein wenig mit C optimieren...

Falls die Lösung jemand interessiert, kann ich sie gerne komplett posten! ...Einstellungen von FreePDF, DirMonitor und die Batches.

Ich hab's auch schon auf Stress getestet, d.h. durcheinander gedruckt, mehrere Sachen in rauhen Mengen gleichzeitig gedruckt. Soweit alles fehlerfrei und ohne Absturz. Und vor allem: 100 mal schneller!

Hier vorweg mal die Batch vom Server und die "Haupt-Batch" vom Client (backslashs ersetzt durch slashs):

Server:
01.
@echo off 
02.
for /F "tokens=1,2,3,4 delims=/" %%i in (%1) do @set pdffilename=%%l 
03.
if errorlevel 1 @for /F "tokens=1,2,3,4 delims=\" %%i in ("%1") do @set pdffilename=%%l 
04.
e: 
05.
cd /spooler/temp 
06.
copy "%pdffilename%" "//%2/%3/%random%%random% %pdffilename%" 
07.
del %1 /f /s /q
Client:
01.
@echo off 
02.
for /F "tokens=1,2,3,4 delims=/" %%i in (%1) do @set pdffilename="%%l" 
03.
c: 
04.
cd "/pdfprint/pdfspooler" 
05.
 
06.
:check 
07.
ping 127.0.0.1 -n 5 
08.
ren %pdffilename% %pdffilename% 
09.
if not exist %1 goto:eof 
10.
if %errorlevel% equ 0 (goto print) else (goto check) 
11.
 
12.
:print 
13.
c:/pdfprint/pdfp.exe %1 
14.
del %1 /f /s /q
Wie gesagt, bei Interesse poste ich's komplett.
Mfg, Michael
Bitte warten ..
Ähnliche Inhalte
Windows 10
Abfrage mit welchem Programm die Datei geöffnet werden soll kommt immer wieder
gelöst Frage von tr1plxWindows 109 Kommentare

Hallo zusammen, klicke ich auf dem Desktop auf eine PDF-Datei, dann öffnet sich diese mit dem "Acrobat Reader DC". ...

Microsoft
Selbst installierte Programme auf C oder D?
gelöst Frage von honeybeeMicrosoft7 Kommentare

Hallo, ich habe eine SSD (Laufwerk C) und eine HDD (Laufwerk D) auf meinem Notebook. Wohin würdet ihr an ...

Microsoft Office
Prüfen wie oft User Programme nutzen
gelöst Frage von PolymeusMicrosoft Office8 Kommentare

Hallo Kollegen, ich habe die Aufgabe auf einem Server der als Applikationsserver läuft zu prüfen wie oft welche Software ...

Grafik
TIFF Datei kann nicht mit Fotoanzeige geöffnet werden
Frage von joemouthGrafik5 Kommentare

Hallo, eine mehrseitige, old-style JPEG compression TIFF Datei kann mit Windows 7 Fotoanzeige nicht angezeigt werden. IrfanView kann das ...

Neue Wissensbeiträge
DSL, VDSL

ALL-BM200VDSL2V - Neues VDSL-Modem mit Vectoring von Allnet

Information von Lochkartenstanzer vor 2 StundenDSL, VDSL1 Kommentar

Moin, Falls jemand eine Alternative zu dem draytek sucht: Gruß lks

Windows 10

Microsoft bestätigt DMA-Policy-Problem in Win10 v1709

Information von DerWoWusste vor 3 StundenWindows 10

Wer sein Gerät mit der DMA-Policy absichert, bekommt evtl. Hardwareprobleme in v1709 von Win10. Warum? Weil v1709 endlich "richtig" ...

Verschlüsselung & Zertifikate

Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows

Information von ticuta1 vor 6 StundenVerschlüsselung & Zertifikate

Interessant Die Hölle friert ein weiteres Stück zu: Microsoft integriert OpenSSH in Windows SSH-Kommando in CMD.exe und PowerShell

Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Heiß diskutierte Inhalte
Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server19 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement17 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...