Uygulamamın bir ağ sürücüsünden çalışıp çalışmadığını programlı olarak öğrenmek istiyorum. Bunu yapmanın en basit yolu nedir? Hem UNC yollarını (\\127.0.0.1\d$
) hem de eşlenen ağ sürücülerini (Z :) desteklemelidir.Bir uygulama bir ağ sürücüsünden çalışıyor olup olmadığını öğrenmek için C# kolay yolu?
cevap
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;
}
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))); }
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
if (new DriveInfo(Application.StartupPath).DriveType == DriveType.Network)
{
// here
}
DriveInfo m = DriveInfo.GetDrives().Where(p => p.DriveType == DriveType.Network).FirstOrDefault();
if (m != null)
{
//do stuff
}
else
{
//do stuff
}
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 {}
}