<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Feststellen, ob eine Datei (evtl. auf anderem Rechner) geöffnet ist]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem, zu dem ich trotz intensiver Suche noch keine Lösung gefunden habe. Ich weiß auch nicht, ob ich hier richtig bin, da es sich vielleicht auch mit einer MFC-Funktion lösen ließe??</p>
<p>Zu meiner Frage:</p>
<p>Ich habe eine Dokumentenverwaltung geschrieben, bei der es nötig ist, dass Dateien im schreibgeschützten sowie auch im Write-Modus von der jeweils zuständigen Applikation geöffnet werden können.<br />
Ich verfahre bisher folgendermaßen:<br />
Datei wird mit ShellExecute(...) geöffnet, nachdem der Schreibschutz gesetzt bzw. entfernt wurde.<br />
Das funktioniert wunderbar, wenn nur ein Rechner diese Dokumentenverwaltung nutzt. Sobald jedoch mehrere Rechner darauf zugreifen, kann es natürlich passieren, dass Rechner A das Dokument zum editieren geöffnet hat und Rechner B das gleiche Dokument nur zur Ansicht öffnen will. In diesem Fall hat A Pech gehabt, wenn er später seine Änderungen speichern will, da durch das schreibgeschützte Öffnen von B der Schreibschutz der Datei gesetzt wurde.<br />
Nun müsste ich herausfinden, ob die Datei evtl. von einem anderen User momentan geöffnet ist, um in diesem Fall den Schreibschutz nicht zu setzen. Nur... wie?<br />
Ich habe schon versucht, das über den Rückgabewert von LockFile(...) herauszubekommen; diese Funktion gibt allerdings auch TRUE zurück, wenn das Dokument (getestet mit <em>.doc- und AutoCAD-</em>.dwg-Dateien) bereits an anderer Stelle geöffnet ist.<br />
Oder bin ich mit meiner Vorgehensweise total auf dem falschen Dampfer?<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Für Tipps wäre ich sehr dankbar.</p>
<p>Vielen Dank und viele Grüße<br />
Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/74988/feststellen-ob-eine-datei-evtl-auf-anderem-rechner-geöffnet-ist</link><generator>RSS for Node</generator><lastBuildDate>Fri, 10 Apr 2026 20:31:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/74988.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 May 2004 12:18:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Feststellen, ob eine Datei (evtl. auf anderem Rechner) geöffnet ist on Wed, 26 May 2004 12:18:29 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe ein Problem, zu dem ich trotz intensiver Suche noch keine Lösung gefunden habe. Ich weiß auch nicht, ob ich hier richtig bin, da es sich vielleicht auch mit einer MFC-Funktion lösen ließe??</p>
<p>Zu meiner Frage:</p>
<p>Ich habe eine Dokumentenverwaltung geschrieben, bei der es nötig ist, dass Dateien im schreibgeschützten sowie auch im Write-Modus von der jeweils zuständigen Applikation geöffnet werden können.<br />
Ich verfahre bisher folgendermaßen:<br />
Datei wird mit ShellExecute(...) geöffnet, nachdem der Schreibschutz gesetzt bzw. entfernt wurde.<br />
Das funktioniert wunderbar, wenn nur ein Rechner diese Dokumentenverwaltung nutzt. Sobald jedoch mehrere Rechner darauf zugreifen, kann es natürlich passieren, dass Rechner A das Dokument zum editieren geöffnet hat und Rechner B das gleiche Dokument nur zur Ansicht öffnen will. In diesem Fall hat A Pech gehabt, wenn er später seine Änderungen speichern will, da durch das schreibgeschützte Öffnen von B der Schreibschutz der Datei gesetzt wurde.<br />
Nun müsste ich herausfinden, ob die Datei evtl. von einem anderen User momentan geöffnet ist, um in diesem Fall den Schreibschutz nicht zu setzen. Nur... wie?<br />
Ich habe schon versucht, das über den Rückgabewert von LockFile(...) herauszubekommen; diese Funktion gibt allerdings auch TRUE zurück, wenn das Dokument (getestet mit <em>.doc- und AutoCAD-</em>.dwg-Dateien) bereits an anderer Stelle geöffnet ist.<br />
Oder bin ich mit meiner Vorgehensweise total auf dem falschen Dampfer?<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /><br />
Für Tipps wäre ich sehr dankbar.</p>
<p>Vielen Dank und viele Grüße<br />
Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/527626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/527626</guid><dc:creator><![CDATA[FlaschenKind]]></dc:creator><pubDate>Wed, 26 May 2004 12:18:29 GMT</pubDate></item><item><title><![CDATA[Reply to Feststellen, ob eine Datei (evtl. auf anderem Rechner) geöffnet ist on Wed, 26 May 2004 12:28:41 GMT]]></title><description><![CDATA[<p>ich finde dein ansatz etwas verwirrend <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
setzt du den schreibschutz ?</p>
<p>lies dir doch mal folgende links durch, damit kannst du dateien öffnen im entsprechenden modus, testen ob sie schon geöffnet sind (rückgabewert und getlasterror) und hast jede menge flags mit denen du spielen kannst.</p>
<p><a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/createfile.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/createfile.asp</a><br />
<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/creating_and_opening_files.asp" rel="nofollow">http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/creating_and_opening_files.asp</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/527631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/527631</guid><dc:creator><![CDATA[miller_m]]></dc:creator><pubDate>Wed, 26 May 2004 12:28:41 GMT</pubDate></item><item><title><![CDATA[Reply to Feststellen, ob eine Datei (evtl. auf anderem Rechner) geöffnet ist on Wed, 26 May 2004 14:30:18 GMT]]></title><description><![CDATA[<p>miller_m schrieb:</p>
<blockquote>
<p>ich finde dein ansatz etwas verwirrend <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
setzt du den schreibschutz ?</p>
</blockquote>
<p>Hallo,<br />
Danke erstmal. Es mag sein, dass der Ansatz verwirrend ist; ist das erste Mal, dass ich mit Files unter C++ zu tun habe...<br />
Ja, ich setze (oder entferne) den Schreibschutz mit SetFileAttributes(...), bevor ich die Datei öffne.<br />
Mein Problem war, dass jede Datei mit der für sie zuständigen Anwendung geöffnet werden soll, und das scheint nur mit ShellExecute(...) zu funktionieren.<br />
Ich werde versuchen, CreateFile(...) aus Deinem Vorschlag nur dazu zu verwenden, festzustellen, ob die Datei bereits geöffnet ist.<br />
Ich werde dann berichten, ob's geklappt hat oder ob ich mich zu sehr anstelle <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .</p>
<p>Viele Grüße<br />
Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/527719</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/527719</guid><dc:creator><![CDATA[FlaschenKind]]></dc:creator><pubDate>Wed, 26 May 2004 14:30:18 GMT</pubDate></item><item><title><![CDATA[Reply to Feststellen, ob eine Datei (evtl. auf anderem Rechner) geöffnet ist on Thu, 27 May 2004 09:06:24 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>so jetzt hab' ich es geschafft. Danke nochmal, dass Du mich mit der Nase drauf gestoßen hast <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> .</p>
<p>Ob die Datei offen ist, läßt sich folgendermaßen prüfen:</p>
<pre><code class="language-cpp">HFILE hFile = OpenFile(cstrPath + cstrName, &amp;ofStruct, OF_WRITE);

if (hFile != HFILE_ERROR)
{
  /*...Datei ist nicht geöffnet, auch sonst keine Probleme, also tu', was zu tun
  ist...*/
}
</code></pre>
<p>Wenn der Rückgabewert von OpenFile(...) == HFILE_ERROR ist, kann man über GetLastError(...) herausfinden, warum's nicht funktioniert.<br />
In meinem Fall reicht es allerdings aus, einfach den HFILE_ERROR zu prüfen.</p>
<p>Viele Grüße<br />
Peter</p>
]]></description><link>https://www.c-plusplus.net/forum/post/528034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/528034</guid><dc:creator><![CDATA[FlaschenKind]]></dc:creator><pubDate>Thu, 27 May 2004 09:06:24 GMT</pubDate></item></channel></rss>