Laden...

Art der Dateiverwendung beim Öffnen analysieren

Erstellt von Krumnix vor 5 Jahren Letzter Beitrag vor 5 Jahren 2.481 Views
K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 5 Jahren
Art der Dateiverwendung beim Öffnen analysieren

Hallo.

Ich möchte gerne eine Datei auf dem Netzwerk öffnen.
Wenn diese Datei schon von wem anderes geöffnet ist, fange ich das ab und gebe eine Meldung dazu aus.
Jedoch kommt die gleiche Meldung auch, wenn die Zugriffsrechte auf diese Datei im Netzwerk fehlen.

Ich würde aber gerne die beiden Punkte unterscheiden um eine korrekte Meldung auszugeben.

Vielleicht wäre es auch möglich den aktuellen Benutzer der geöffneten Daten rauszufinden und anzuzeigen?!

Jemand Tipps für mich?

Danke!

2.078 Beiträge seit 2012
vor 5 Jahren

Hab ich nur kurz überflogen, aber das sieht hilfreich aus:
See what processes have a file locked in C#
Wenn da kein Ergebnis bei raus kommt, dann ist die Datei wohl nicht durch ein Prozess geblockt.

Übrigens:
Das hab ich in zwei Minuten ergoogelt 😉
Wenn Du selber suchst, erreichst Du oft sehr viel schneller dein Ziel und die aller meisten Fragen wurden bereits irgendwo beantwortet.

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 5 Jahren

Ja, das hab ich ja getan und auch diese Seite dabei gefunden.

Aber leider nicht das, was ich suche.

Das eine Datei geöffnet ist und durch ein anderes Programm verwendet wird, solange dies Lokal erfolgt, funktioniert ja.
Ich möchte das aber übers Netzwerk haben.

Sprich, wenn PC 1 die Datei grad bearbeitet und PC 2 diese öffnen will, sollte eine Meldung in Form von "Die Datei wird im Moment von PC 1 verwendet. Bitte kontaktieren Sie PC 1 oder versuchen es später wieder".

Noch "besser" wäre es, wenn dann "Möchten Sie die Datei schreibgeschützt öffnen" möglich wäre.
Aber das suche ich grad selbst bei Google 😃

Frage ist halt, wie kann ich die Zugriffsrechte einer Datei analysieren und wenn ich die Rechte habe, wer diese Datei ggf. geöffnet hat?

16.806 Beiträge seit 2008
vor 5 Jahren

Ich möchte das aber übers Netzwerk haben.

Geht nicht. Es gibt derzeit kein Protokoll, dass das kann.

286 Beiträge seit 2011
vor 5 Jahren

Es gibt derzeit kein Protokoll, dass das kann.

Weißt du wie Microsoft, dass derzeit umsetzt?
Wenn z.B. eine xls-Datei bereits von einem Benutzer geöffnet ist, steht in Excel auch die Meldung "wird bereits von Benutzer XYZ verwendet".

Meine Vermutung gehen dahin, dass das über die AD umgesetzt wird, wissen tu ichs aber nicht.

2+2=5( (für extrem große Werte von 2)

T
2.219 Beiträge seit 2008
vor 5 Jahren

Excel legt beim öffnen der Datei eine versteckte Datei an.
Entsprechend kann Excel dabei prüfen ob die Datei gerade von einem anderen Benutzer/Rechner verwendet wird.
Bei Tools, die man aber nicht selbst entwickelt und die sowas nicht machen, kann man dies auch nicht über das Netzwerk ermitteln.
Hier hat Abt also schon Recht, dass man dies nicht generell prüfen kann.
Excel und die Office Programme sind dabei eine Ausnahme.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

D
261 Beiträge seit 2015
vor 5 Jahren

Meine Vermutung ist, dass es vielleicht ~~direkt in die Datei eingetragen wird beim öffnen oder ~~über die Backupdatei (die Datei mit der Tilde am Anfang) geregelt wird.

Edit: siehe T-Virus Antwort

286 Beiträge seit 2011
vor 5 Jahren

Da dein anderer Beitrag als Doppelpost markiert wurde, du dort aber dein Problem etwas konkreter beschrieben hast:

Klingt nach klassischer Versionsverwaltung. Stichwort: Git

Das ist genau für das was du dir vorstellst. Dazu gibt es unzählige kostenlose sowie kostenpflichtige Angebote (GitHub ist wohl der aktuell bekannteste Anbieter).
Wenn du das Rad dennoch neu erfinden und was eigenes schreiben willst, würde ich mich trotzdem an Git orientieren.

Beste Grüße
emuuu

2+2=5( (für extrem große Werte von 2)

5.941 Beiträge seit 2005
vor 5 Jahren

Hallo Krumnix

Es gibt auch eine API für C#, um GIT per Code zu steuern.
Schau mal hier: https://github.com/libgit2/libgit2sharp

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 5 Jahren

Naja, ein Doppelpost ist das nach meiner Ansicht nicht.

Das eine war, herausfinden, ob eine Datei geöffnet ist.

Das andere ist, wer was in einer Datei gemacht hat und dem anderen dann automatisch informieren. 2 ganz verschiedene Welten!

Aber egal. Sei's drum.

GIT kenne ich. Aber damit funktioniert das nicht so. Die Dateien sind Binär hinterlegt. Da scheitert GIT komplett.

Ich hab vom "Hersteller" der Dateien eine DLL mit der ich den Inhalt in meinem Programm anzeigen lassen und bearbeiten kann.
Daher ist es mir auch möglich, Vergleiche oder sonstiges zu tun, was halt GIT und co. nicht kann (außer man kann per Script oder sonstiges externe DLL's angeben, hab ich aber nix dazu gefunden!).

Da es halt Benutzer gibt, die ihr Programm eine Woche geöffnet lassen und den PC nicht herunterfahren, muss ich in dem Programm die Änderungen an den Dateien mitbekommen und zwar AUTOMATISCH!
Ohne Pull, Push...

Kurz:
-Programm starten
-Projekt öffnen
-Dateien darin verarbeiten
-Automatische Anpassung der Dateien, bzw. Info, wenn geändert wurde
(Soll Datei neu geladen werden oder wollen Sie vergleichen?)

Lösung:
-Timer, welcher eine "versteckte" Datei auf dem Netzwerk immer wieder ausliest und darin die geöffneten Dateien hinterlegt werden???
-Jede Datei beim 1. Öffnen als versteckte Kopie ablegen mit Infos, wer (wie z.B. Office)???
-Datenbanken mit Links zu den Dateien und in der Datenbank den Zugriff hinterlegen?
-Andere Möglichkeiten, Performance, etc?

286 Beiträge seit 2011
vor 5 Jahren

Also binär liegen letzten Endes alle Dateien vor. Das ist das Prinzip von nicht-Quanten-IT.
Dass die Dateien tatsächlich für dich nur aus 1 und 0 bestehen bezweifle ich einfach mal.

Du schreibst aber, dass die Benutzer die Dateien ändern können, ergo du musst Sie verändern können, ergo du kannst Git verwenden.

Da es halt Benutzer gibt, die ihr Programm eine Woche geöffnet lassen und den PC nicht herunterfahren, muss ich in dem Programm die Änderungen an den Dateien mitbekommen und zwar AUTOMATISCH!
Ohne Pull, Push...

Pull und Push ist nur der Vorgang sich die aktuellste Version zu holen bzw. seine Commits anderen mitzuteilen. Dass dies aktiv durch den User gemacht werden muss ist nicht gesagt. Peter hat dir schon einen Link zu einer API fü Git+C# gepostet, damit kannst du das Ganze auch automatisieren.

2+2=5( (für extrem große Werte von 2)

2.078 Beiträge seit 2012
vor 5 Jahren

Ich würde mal darauf tippen, Krumnix möchte die Änderung an einer Datei visualisieren können. Bei einem binären Format (eben kein Text) ist das bei gängigen auf Text basierenden Systemen wie GIT eher unpraktisch, denn welcher Nutzer kann aus den binären Unterschieden irgendwelche hilfreichen Informationen heraus lesen.

Wenn Du (Krumnix) das haben willst, wirst Du wahrscheinlich nicht an einem ähnlichen Prinzip wie GIT, TFS oder SVN vorbei kommen. (Oder kann eines der Systeme eine Art Vergleichs-Plugin?

Sprich: Du brauchst alle Dateien irgendwo im Netzwerk verfügbar. Jeder, der damit arbeitet, lädt sich einmal den ganzen Stand herunter. Sobald er eine Datei bearbeitet, markiert der Server (Benachrichtigung durch den Client) die Datei, dass sie jemand bearbeitet. Das lokal beobachten kannst Du in der Anwendung selber oder mit einem FileWatcher lösen. Die Markierung, dass die Datei geändert ist, liegt dann in der Verantwortung des Servers, wie er das tut, kann von einer weiteren Datei oder einem Datenbank-Eintrag gehen, das ist egal, da nur der Server Zugriff auf diese Datein hat und sie dann entsprechend weiter reicht.

Die Änderungen sind dabei etwas schwieriger. GIT macht einen Text-Vergleich,eventuell kann es verschiedene Formate wie C# oder XML unterschiedlich vergleichen. Bei eigenen binären Formaten fällt das weg, Du musst also einen eigenen Vergleich bauen. Wie das konkret aussieht, kann dir hier niemand sagen, das hängt von deinen Daten ab, aber egal was für Daten, es wird mit dem Parsen der zu vergleichenden Dateien beginnen und der Vergleich findet dann auf Objekt-Ebene statt.

K
Krumnix Themenstarter:in
129 Beiträge seit 2018
vor 5 Jahren

Für den Vergleich habe ich schon alles fertig.
Übergebe die Dateien an die DLL und bekommen "Klartext" zurück.
Vergleiche das dann und zeige die Unterschiede an, wenn sich was ändert.

Ich muss nur eine performantes Konzept umsetzen, dass alle aktiven
Programme die mitgeteilt bekommen.

GIT ist gut für Code-Verwaltung, aber nicht für mein Problem.

Ich suche mal weiter und versuche ein paar Möglichkeiten durch.

Falls wer noch einen Tipp hat, gerne her damit 😃

87 Beiträge seit 2016
vor 5 Jahren

Hallo,

du brauchst somit eine zentrale Stelle, wo sich die Clients selber die Information abholen, dass eine Änderung eingetreten ist oder von wo aus die Clients bei einer Änderung automatisch informiert werden.

glandorf

5.657 Beiträge seit 2006
vor 5 Jahren

Hi Krumnix,

Naja, ein Doppelpost ist das nach meiner Ansicht nicht.

Das eine war, herausfinden, ob eine Datei geöffnet ist.

Das andere ist, wer was in einer Datei gemacht hat und dem anderen dann automatisch informieren. 2 ganz verschiedene Welten!

Es geht um das gleiche Problem, nämlich mehreren Anwendern parallel Zugriff auf Dateien im Netzwerk zu geben. Wenn du die Anforderungen dazu nachreichen möchstest, dann kannst du das in deinem Original-Thread machen, zumal dort bereits Antworten dazu vorlagen. Da braucht es keinen neuen Thread.

Zu deinem Problem: Die Standardlösung wäre ein WebService und/oder eine Datenbank. Da braucht es kein GIT oder zusätzliche Dateien oder ähnliches Gefrickel.

Weeks of programming can save you hours of planning