2011-12-26 36 views

cevap

2

Bu Bunu yapmanın benim şimdiki yöntemdir, ancak daha iyi bir yolu olmalı gibi geliyor için DriveInfo sınıfını test edin. ,

private bool IsRunningFromNetworkDrive() 
    { 
     var dir = AppDomain.CurrentDomain.BaseDirectory; 
     var driveLetter = dir.First(); 
     if (!Char.IsLetter(driveLetter)) 
      return true; 
     if (new DriveInfo(driveLetter.ToString()).DriveType == DriveType.Network) 
      return true; 
     return false; 
    } 
18

Bu, eşlenmiş sürücü kasası içindir. A sürücüsünün bir ağ sürücüsü olup olmadığını öğrenmek için DriveInfo sınıfını kullanabilirsiniz.

DriveInfo info = new DriveInfo("Z"); 
if (info.DriveType == DriveType.Network) 
{ 
    // Running from network 
} 

Komple yöntem ve Örnek Kod. UNC yolu kullanarak durumda

public static bool IsRunningFromNetwork(string rootPath) 
{ 
    try 
    { 
     System.IO.DriveInfo info = new DriveInfo(rootPath); 
     if (info.DriveType == DriveType.Network) 
     { 
      return true; 
     } 
     return false; 
    } 
    catch 
    { 
     try 
     { 
      Uri uri = new Uri(rootPath); 
      return uri.IsUnc; 
     } 
     catch 
     { 
      return false; 
     } 
    } 
} 

static void Main(string[] args) 
{ 
    Console.WriteLine(IsRunningFromNetwork(System.IO.Path.GetPathRoot(AppDomain.CurrentDomain.BaseDirectory))); } 
1

o quitely basittir - bu localhost (127.0.0.1, iş istasyonunun :: 1, ana makine adı hostname.domain.local, ip-adresleri olduğunu konak UNC adı ve testi incelemek) ya da değil.

yolu UNC değilse - yolundan sürücü harfini ayıklamak ve türünün

4
if (new DriveInfo(Application.StartupPath).DriveType == DriveType.Network) 
{  
    // here 
} 
0
DriveInfo m = DriveInfo.GetDrives().Where(p => p.DriveType == DriveType.Network).FirstOrDefault(); 
if (m != null) 
{ 
    //do stuff 
} 
else 
{ 
    //do stuff 
} 
0

Ben geçerli bir yol geçirildiğinde bunun istisnaları önler, çünkü daha iyi bence olduğunu dotnetstep çözümünü, yeniden düzenlenmiş ve geçirilen bir yanlış yolu varsa bir istisna atar Doğru veya yanlış varsayımına izin vermez.

//---------------------------------------------------------------------------------------------------- 
/// <summary>Gets a boolean indicating whether the specified path is a local path or a network path.</summary> 
/// <param name="path">Path to check</param> 
/// <returns>Returns a boolean indicating whether the specified path is a local path or a network path.</returns> 
public static Boolean IsNetworkPath(String path) { 
    Uri uri = new Uri(path); 
    if (uri.IsUnc) { 
    return true; 
    } 
    DriveInfo info = new DriveInfo(path); 
    if (info.DriveType == DriveType.Network) { 
    return true; 
    } 
    return false; 
} 

Testi:

//---------------------------------------------------------------------------------------------------- 
/// <summary>A test for IsNetworkPath</summary> 
[TestMethod()] 
public void IsNetworkPathTest() { 
    String s1 = @"\\Test"; // unc 
    String s2 = @"C:\Program Files"; // local 
    String s3 = @"S:\"; // mapped 
    String s4 = "ljöasdf"; // invalid 

    Assert.IsTrue(RPath.IsNetworkPath(s1)); 
    Assert.IsFalse(RPath.IsNetworkPath(s2)); 
    Assert.IsTrue(RPath.IsNetworkPath(s3)); 
    try { 
    RPath.IsNetworkPath(s4); 
    Assert.Fail(); 
    } 
    catch {} 
}