Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

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, 8487 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
Microsoft
gelöst Selbst installierte Programme auf C oder D? (7)

Frage von honeybee zum Thema Microsoft ...

Batch & Shell
gelöst Programme beenden Batch Dateien (3)

Frage von anmelder zum Thema Batch & Shell ...

Batch & Shell
gelöst EDI Dateien auf Inhalt prüfen und verschieben (6)

Frage von ThomasKern zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batch auf Erstelldatum einer Datei prüfen (5)

Frage von AS-N00 zum Thema Batch & Shell ...

Neue Wissensbeiträge
Ubuntu

Ubuntu 17.10 steht zum Download bereit

(3)

Information von Frank zum Thema Ubuntu ...

Datenschutz

Autofahrer-Pranger - Bewertungsportal illegal

(8)

Information von BassFishFox zum Thema Datenschutz ...

Windows 10

Neues Win10 Funktionsupdate verbuggt RemoteApp

(8)

Information von thomasreischer zum Thema Windows 10 ...

Microsoft

Die neuen RSAT-Tools für Win10 1709 sind da

(2)

Information von DerWoWusste zum Thema Microsoft ...

Heiß diskutierte Inhalte
Router & Routing
Allnet - VDSL2 Modem - SFP (mini-GBIC) (20)

Frage von Dobby zum Thema Router & Routing ...

Windows 10
Windows 10 Ordnerfreigabe (18)

Frage von Xaero1982 zum Thema Windows 10 ...

Voice over IP
DeutschlandLAN IP Voice Data M Premium, Erfahrung mit Faxgeräte? (17)

Frage von liquidbase zum Thema Voice over IP ...

Monitoring
Netzwerk-Monitoring Software (17)

Frage von Ghost108 zum Thema Monitoring ...