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?
Mein Blog: http://www.frickelblog.de
mhm...
Suchst du noch nen Job als Fachinformatiker?
Könntest hier auf jeden Fall ziemlich gut rein passen mit solchen Lösungen 😉
Mein Blog: http://www.frickelblog.de
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.
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.
Mein Blog: http://www.frickelblog.de