2011-01-05 3 views
1

Das ist, was ich versuche zu tun:Gibt es einen Weg in C# zu wissen, wann der Benutzer die Bearbeitung einer Datei mit einer Anwendung beendet hat?

  1. eine Datei herunterladen (txt, doc, xls, was auch immer) von einem Server
  2. öffnen Sie die Datei mit der entsprechenden Anwendung mit System.Diagnostics.Process. Start (Pfad zur Datei)
  3. Monitor für Dateiänderungen mit einem FileSystemWatcher.
  4. Jedes Mal, wenn die Datei geändert wird, laden Sie die Datei an den Server zurück
  5. Überwachung fortsetzen, bis der Benutzer
  6. Löschen Sie die lokale Kopie der
  7. Beenden Sie die Anwendung
Datei Bearbeitung der Datei abgeschlossen ist

Ich bin bei Schritt 5 fest. Wie kann ich wissen, ob ein Benutzer die Arbeit an einer Datei beendet hat?

Ich kann nicht darauf verlassen, dass die Datei gesperrt wird (Notepad zum Beispiel nicht txt-Dateien sperren).

Ich kann nicht auf einen Prozess verlassen oder nicht verlassen (ein Beispiel ist Notepad ++ für TXT-Dateien: Die Datei könnte auf einer Registerkarte geöffnet werden. Wenn Sie die Registerkarte schließen, haben Sie die Bearbeitung der Datei abgeschlossen, aber der Prozess ist läuft noch)

Irgendwelche Ideen/Punkte, wie man das in C# macht?

+0

Ich sehe Ihren Standpunkt. Ich vermute, dass System.Diagnostics.Process.Start() der Standard-Editor ist, oder? In diesem Fall ist es schwierig. Wir haben dieses Problem gelöst, indem wir einen eigenen Editor (oder immer einen Notizblock, wenn Sie möchten) starten und warten, bis der Prozess abgeschlossen ist, aber vielleicht ist das keine Lösung für Sie. –

+0

Über notepad ++: git-Benutzer lösen dieses Problem mit den Schaltern '-multiInst -nosession -notabbar' - auf diese Weise wird notepad ++ gezwungen, einen einzigen, eindeutigen Prozess für die überwachte Datei zu erstellen. – rsenna

+0

@Kiquenet Nicht wirklich. Ich habe dies mit der Sperrüberwachung für Office-Dateien (doc, xls, ppt) implementiert, die von meinen Benutzern am häufigsten verwendet werden. Txt-Dateien waren nur winzige Teile von Dateien und am Ende kein echtes Problem. –

Antwort

3

Sie haben die zwei Möglichkeiten ausgeschlossen, die Sie gehen könnten Erkennung die Datei wird verwendet: Dateisperrung, und der Prozess, den Sie starten beenden.

Die einzige Alternative, die ich denke, ist, einen Dialog zu den Benutzer anzuzeigen, wenn sie die Bearbeitung abgeschlossen haben.

Edit: Für was es wert ist - FileZilla hat diese Art von Verhalten. Sie können eine Datei auf dem Remote-Server bearbeiten, sie lädt die Datei herunter, startet den Standardeditor und (im Hintergrund) zeigt ein "Wenn Sie die Bearbeitung abgeschlossen haben - Klicken Sie auf OK".
Dies gibt mir die Möglichkeit, eine Bearbeitung abzubrechen, wenn ich die Datei mucked und gespeichert habe.

+3

+1 Als ein Benutzer, würde ich bevorzugen, dass eine Anwendung mich fragt, wenn ich fertig bin, anstatt zu versuchen, –

+0

Dank für die Dialogalternative ... andere Beiträge und Kommentare in diesen Threads zu sehen, sieht es so aus Das ist der einzige Weg zu gehen. Es ist nicht so viel benutzerfreundlich obwohl, denke ich :( –

0

Sie können das Datum der letzten Änderung der Datei überprüfen. Dieses Datum wird festgelegt, wenn Sie Änderungen an der Datei speichern. Beachten Sie jedoch, dass dieses Feld nicht sehr zuverlässig ist, da es auf einen beliebigen Wert gesetzt werden kann (mit entsprechenden Werkzeugen).

+0

Dies wird die gleiche Wirkung wie (3) in der Frage haben, d. H. Der FileSystemWatcher –

+0

Hoppla - du hast recht, habe nicht daran gedacht. –

1

Das ist wirklich schwer zu tun - wir haben verschiedene Dinge ausprobiert, aber nie etwas gefunden, das narrensicher war. Wenn Sie das Programm kennen, das Sie dann gestartet haben, können Sie theoretisch die Dateihandles finden, die es verwendet, und sehen, wenn es aufhört, das zu verwenden, an dem Sie interessiert sind ... aber wenn Sie sich auf Windows verlassen, um die Standardanwendung aufzulösen zu starten wird sogar schwierig.

Wir kopieren bearbeitbare Dateien in einen temporären Ordner, der mit dem Datum benannt ist, und verlassen uns darauf, dass Benutzer sie zurückladen, wenn sie ihre Bearbeitungssitzung beendet haben. Wir bereinigen dann die Ordner früherer Tage beim Start der Anwendung.

Verwandte Themen