2010-12-01 12 views
7

文字列が正規表現以外のローカルフォルダ文字列またはネットワーク文字列である場合、C#でどのように判断できますか?例えば文字列がローカルフォルダ文字列かネットワーク文字列かどうかを確認する方法はありますか?

私は"c:\a"または"\\foldera\folderb"

+4

でもUNCパス( '\\\ 'で始まる)がローカルマシンを指している可能性があります。 – Oded

+0

参照http://stackoverflow.com/questions/520753/what-is-the-correct-way-to-check-if-a-path-is-an-unc-path-or-a-local-path/ 520796#520796 – nos

+0

余りにも遅いですが、これは完璧な答えです。 [link]、これをいくつかご希望ですか? [1]:http://stackoverflow.com/questions/2243569/check-if-path-is-on -network#2244497 – mahmoodels

答えて

17

new Uri(mypath).IsUnc

+2

また、 –

4

私はこの質問への完全な答えはDriveInfo.DriveTypeプロパティの使用を含めることだと思います。

public static bool IsNetworkPath(string path) 
{ 
    if (!path.StartsWith(@"/") && !path.StartsWith(@"\")) 
    { 
     string rootPath = System.IO.Path.GetPathRoot(path); // get drive's letter 
     System.IO.DriveInfo driveInfo = new System.IO.DriveInfo(rootPath); // get info about the drive 
     return driveInfo.DriveType == DriveType.Network; // return true if a network drive 
    } 

    return true; // is a UNC path 
} 

スラッシュ文字で始まるかどうかを確認するパスをテストし、それがスラッシュチャールで始まる場合はUNCパスです。この場合、ネットワークパスであると仮定する必要があります。実際には、ローカルマシンを指し示すUNCパスである可能性があるため、別のPCを指すパスではない可能性があります。私が推測するほとんどの人にはおそらくそうですが、もっと弾丸に耐えられる解決策が必要な場合は、この状態のチェックを追加することができます。

パスがスラッシュ文字で始まらない場合は、DriveInfo.DriveTypeプロパティを使用して、ネットワークドライブかどうかを判断します。

-1

おもしろい質問と回答、 私は簡単なpathstring.Substring(1, 2) != @":\"を試してみることがあります。ローカルまたはネットワークドライブへのパスポイントかどうかを確認する

も ​​`pathstringが長さゼロまたはヌル

ではないことを予め確認**編集

0

もう一つの方法:

var host = new Uri(@"\\foldera\folderb").Host; //returns "foldera" 
if(!string.IsNullOrEmpty(host)) 
{ 
    //Network drive 
} 
関連する問題