2009-07-28 2 views
1

Ich habe ein Stück Code, der meine verarbeitete Datei an einem Speicherort speichert. Wenn sich in dieser Datei Daten befinden, die Unterverzeichnisse oder Dateien sind, wird das Verzeichnis zuerst gelöscht und die verarbeitete Datei wird dort gespeichert. Wenn ich nun den Pfad als C: \ gebe, werden alle Daten in Laufwerk C: \ gelöscht. Ich will das nicht. Ich möchte überprüfen, ob der angegebene Speicherort die Partition der Partition C: \ oder D: \ ist und nicht gelöscht werden sollte. Kann mir jemand die Syntax sagen?Ich möchte eine Überprüfung, die nicht löscht meine Laufwerke C: und D: Laufwerk auf meinem Computer

+0

Sie nicht Ihr Programm als Administrator ausführen. – grawity

+1

Der Programmierer hat keine Wahl in dieser Angelegenheit. Wenn der Benutzer über Administratorrechte verfügt, wird das Programm als Administrator ausgeführt. –

Antwort

1

Wenn das erste Zeichen ein Buchstabe ist und das zweite Zeichen ein Doppelpunkt ist und die Länge der Zeichenfolge 2 oder 3 ist, verbieten Sie es.

EDIT: Oder einfach auf den Doppelpunkt und die Länge überprüfen. Ein weniger überprüfen.

+0

Das einzige Problem ist, wenn Sie diese Art von Funktionalität auf ein F-Laufwerk sagen möchten, weil es ein Thumb-Laufwerk, mit dem Sie es verwenden möchten und es löschen. – SteveM

+0

Das stimmt. Ich nehme an, Sie könnten eine "sichere Liste" erstellen, d. H. Es ist in Ordnung, das F-Laufwerk zu beenden. –

5
string partition = "C:\\"; 
DirectoryInfo di = new DirectoryInfo(partition); 
if (di.Root.ToString() == partition) 
{ 
    // this is the root directory 
} 
1

Wenn Sie eine Variable file, die Ihren Dateinamen hält Sie so etwas tun könnte:

using System.Linq; 

string file = "c:\filename.txt"; 

FileInfo fileInfo = new FileInfo(file); 
if (Directory.GetLogicalDrives().Contains(fileInfo.DirectoryName)) 
{ 
    // File is in root of drive 
} 
else 
{ 
    // File is in a sub-folder 
} 

(Dies wurde für „Intellisense-Qualität“ getestet, dh es kompilieren sollte, aber es vielleicht nicht zu 100% korrekt ausgeführt, so wenden Sie sich bitte testen, bevor Sie sich entscheiden, es zu benutzen.)

0

Sie können alle logischen Laufwerke auflisten und einfach überprüfen, ob die zur Verfügung gestellt savepath mit einem der Wurzel drivepaths entspricht

1

Sie sollten es nicht so machen. Sie sollten c ode access security verwenden, um Ihre Anwendung so einzuschränken, dass sie nur auf die Verzeichnisse zugreifen kann, auf denen sie arbeiten soll. Schauen Sie sich die FileIOPermissionAttribute. Hier ist an example der Dateirechte einer Anwendung beschränken (es ist ein ASP.NET-Beispiel, aber das Konzept ist ähnlich).

Sie sollten Ihre Anwendung auch unter einem Benutzerkonto ausführen, das nicht über hohe Rechte verfügt. NTFS-Zugriff auf Dateispeicherorte, von denen nicht gelöscht werden soll.

+0

Ist das möglicherweise nicht möglich, wenn diese Anwendung auf dem Computer eines Clients ausgeführt wird? Der Kunde möchte möglicherweise die (sehr angemessenen) korrekten Zugriffsberechtigungen für seine Benutzer nicht haben, und daher kann es eine gute Strategie sein, einen "Gürtel und Zahnspange" Ansatz zur Prävention zu haben. –

Verwandte Themen