Laden...

Geöffnete Dateien anzeigen und schliessen

Erstellt von Sclot vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.379 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren
Geöffnete Dateien anzeigen und schliessen

Ich habe folgenden Code um Herauszufinden, welche Dateien in meinen Freigaben geöffnet sind:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.DirectoryServices;
using ActiveDs;

namespace geoeffnetedateien
{
	public partial class Form1 : Form
	{
		public Form1()
		{
			InitializeComponent();
		}

		private void button1_Click(object sender, EventArgs e)
		{
			using (DirectoryEntry container = new DirectoryEntry("WinNT://" + "127.0.0.1" + "/LanmanServer"))
			{
				IADsFileServiceOperations fso = container.NativeObject as IADsFileServiceOperations;
				if (fso != null)
				{

					IADsCollection resources = fso.Resources() as IADsCollection;

					foreach (IADsResource resource in resources)
					{
						try
						{
							Console.WriteLine(resource.Path+" / "+ resource.User + " / " + resource.LockCount.ToString());
							
						}
						catch (System.IO.FileNotFoundException ex)
						{
							// Fehler...
						}
					}
				}
			}
		}
	}
}


Als Ausgabe bekomme ich dann:


D:\public\ / Sven / 0
D:\public\ / Sven / 0
D:\public\test\test.dbc / Sven / 0
D:\public\test\test.DCT / Sven / 0
D:\public\test\test.DCX / Sven / 0
D:\public\test\test.dbf / Sven / 0
D:\public\test\test.CDX / Sven / 0

Hierbei handelt es sich um ein paar DBF Tabellen, welche von irgendjemanden über die Freigabe im Zugriff sein kann.

Jetzt brauche ich eine Möglichkeit diese Dateien zu schliessen.
Dabei dürfen sie auch ruhig kaputt gehen, da sie danach ehh gelöscht werden 😃

Das ganze soll programmatisch passieren, weil das irgendwann nachts geschehen soll.
Da hat sich noch keiner gefunden der sich dann die Computerverwaltung des Servers aufruft und die Dateien frei gibt 😉

Ja...
Irgendwelche Ideen zum vorhaben?

Gelöschter Account
vor 13 Jahren

dirty... dürfte aber funktionieren:

  1. alle netzwerkkarten deaktivieren
  2. 30 sekunden warten
  3. alles weglöschen
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren

mhm...
Suchst du noch nen Job als Fachinformatiker?
Könntest hier auf jeden Fall ziemlich gut rein passen mit solchen Lösungen 😉

Gelöschter Account
vor 13 Jahren

ne, danke 😉

eine andere lösung könnte sein, die freigaben über wmi zu schließen (wenn das über wmi geht), dann werde automatisch alle angehängten disconnected und dann die aktionen auszuführen, ansonsten ist es recht schwer, da ja noch filehandles auf die dateien existieren und die zu lokalisieren und zu schließen ist sehr sehr aufwändig und in c# unmöglich.

S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 13 Jahren

Das ist doch die Idee..
Einfach die Freigabe trennen, löschen und wieder verbinden...
Ist auf jeden Fall besser als den kompletten Netzwerk-Verkehr lahm zu legen.