C# 我想进行一项检查,确保不会删除我机器上的C:\和D:\驱动器

C# 我想进行一项检查,确保不会删除我机器上的C:\和D:\驱动器,c#,file,C#,File,我有一段代码,可以将处理过的文件保存在某个位置。如果该文件中有任何子目录或文件的数据,则首先删除该目录,然后将已处理的文件存储在其中。现在,如果我将路径指定为C:\那么C:\驱动器中的所有数据都将被删除。我不要这个。我想检查给定的位置是否是C:\或D:\分区中的任何一个,然后不应该删除它。 谁能告诉我语法吗?如果第一个字符是字母,第二个字符是冒号,字符串的长度是2或3,则不允许 编辑:或者只检查冒号和长度。少检查一次。如果第一个字符是字母,第二个字符是冒号,字符串的长度是2或3,则不允许 str

我有一段代码,可以将处理过的文件保存在某个位置。如果该文件中有任何子目录或文件的数据,则首先删除该目录,然后将已处理的文件存储在其中。现在,如果我将路径指定为C:\那么C:\驱动器中的所有数据都将被删除。我不要这个。我想检查给定的位置是否是C:\或D:\分区中的任何一个,然后不应该删除它。
谁能告诉我语法吗?

如果第一个字符是字母,第二个字符是冒号,字符串的长度是2或3,则不允许


编辑:或者只检查冒号和长度。少检查一次。

如果第一个字符是字母,第二个字符是冒号,字符串的长度是2或3,则不允许

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

编辑:或者只检查冒号和长度。少检查一次。

如果您有一个保存文件名的变量
文件
,您可以执行以下操作:

string partition = "C:\\";
DirectoryInfo di = new DirectoryInfo(partition);
if (di.Root.ToString() == partition)
{
   // this is the root directory
}
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
}

(这是针对“Intellisense质量”进行的测试,即它应该编译,但可能无法100%正确运行,因此请在决定使用它之前进行测试。)

如果您有一个保存文件名的变量
文件
,您可以执行以下操作:

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
}

(这是针对“Intellisense quality”进行的测试,即它应该编译,但可能无法100%正确运行,因此请在决定使用它之前进行测试。)

您可以枚举所有逻辑驱动器,只需检查提供的存储路径是否与根驱动器路径之一对应


您可以枚举所有逻辑驱动器,只需检查提供的存储路径是否与根驱动器路径之一对应


你不应该那样做。您应该使用c来限制您的应用程序只能访问它应该操作的目录。看看这本书。下面是限制应用程序文件权限的示例(这是一个ASP.NET示例,但概念类似)


您还应该在一个用户帐户下运行应用程序,该帐户不具有对不应从中删除的文件位置的高权限NTFS访问

你不应该那样做。您应该使用c来限制您的应用程序只能访问它应该操作的目录。看看这本书。下面是限制应用程序文件权限的示例(这是一个ASP.NET示例,但概念类似)


您还应该在一个用户帐户下运行应用程序,该帐户不具有对不应从中删除的文件位置的高权限NTFS访问

如果您确实担心要写入的磁盘驱动器的类别(例如,仅写入可移动介质),那么这里有一个答案

如果您确实担心要写入的磁盘驱动器的类别(例如,仅写入可移动介质)那么这里有一个答案

不要以管理员的身份运行你的程序。程序员在这件事上没有选择的余地。如果用户拥有管理员权限,程序将以管理员身份运行。不要以管理员身份运行程序。程序员在这方面没有选择权。如果用户拥有管理员权限,程序将以管理员身份运行。唯一的问题是,如果您确实希望在F驱动器上使用这种功能,因为它是一个拇指驱动器,您希望使用它并将其擦除。这是真的。我想你可以创建一个“安全列表”,也就是说,杀死F驱动器是可以的。唯一的问题是,如果你真的想在F驱动器上使用这种功能,比如说,因为它是一个拇指驱动器,你想使用它并将其擦除。这是真的。我想您可以创建一个“安全列表”,也就是说,可以关闭F驱动器。如果此应用程序在客户端计算机上运行,那么实际上可能无法强制执行此操作?客户可能不希望他们的用户拥有(非常合适的)正确的访问权限,因此采用“带上支架”的预防方法可能是一个很好的策略。如果此应用程序在客户机上运行,那么实际上可能无法强制执行?客户可能不希望他们的用户拥有(非常合适的)正确的访问权限,因此采用“安全带”的预防方法可能是一个很好的策略。