19

WPFで指定された文字列からドライブがシステムに存在することを確認する方法。私は次のことを試しました

元: FileLocation.Text = "K:\TestDrive\XXX";

if (!Directory.Exists(FileLocation.Text))
{
         MessageBox.Show("Invalid Directory", "Error", MessageBoxButton.OK);
         return;
}

フルパスをチェックしていますがit should check "K:\" from the text。案内していただけませんか

編集 1:K:\TestDrive\XXX」は静的ではありません

EDIT 2:以下を試しましたが、私のシステムではfalse3 drives C, D and Eと表示されています。

Environment.SystemDirectory.Contains("D").ToString(); = "False"
4

8 に答える 8

38
string drive = Path.GetPathRoot(FileLocation.Text);   // e.g. K:\

if (!Directory.Exists(drive))
{
     MessageBox.Show("Drive " + drive + " not found or inaccessible", 
                     "Error", MessageBoxButton.OK);
     return;
}

もちろん、追加のサニティ チェック (パス ルートに少なくとも 3 文字あるか、2 番目の文字はコロンか) を追加する必要がありますが、これは読者の課題として残します。

于 2013-06-27T05:33:53.570 に答える
8

あなたはフォローすることができます

bool isDriveExists(string driveLetterWithColonAndSlash)
{
    return DriveInfo.GetDrives().Any(x => x.Name == driveLetterWithColonAndSlash);
}
于 2013-06-27T05:23:57.707 に答える
2

を使用して、システム内の論理ドライブEnvironment.GetLogicalDrives()を取得できます。string[]

var drive = Path.GetPathRoot(FileLocation.Text);
if (Environment.GetLogicalDrives().Contains(drive, StringComparer.InvariantCultureIgnoreCase))
{
         MessageBox.Show("Invalid Directory", "Error", MessageBoxButton.OK);
         return;
}
于 2016-05-30T20:46:31.123 に答える
2

これは、Environment.SystemDirectory.XXXXX が、システム/Windows がインストールされている場所に関するすべてであるためです。HD 全体ではありません。

このために使用できます.....

    foreach (var item in System.IO.DriveInfo.GetDrives())
    {
        MessageBox.Show(item.ToString());
    }

接続されている USB を含むすべてのドライブが表示されます.....

于 2013-06-27T05:58:20.317 に答える
1

あなたはこれを試すことができます....

MessageBox.Show(Environment.SystemDirectory.Contains("D").ToString());
于 2013-06-27T05:24:51.033 に答える
0

このようにC#でドライブをチェックできます

   foreach (var drive in DriveInfo.GetDrives())
   {
       //Code goes here
   }
于 2013-06-27T05:22:48.127 に答える