2017-06-16 45 views
0

我有一個用戶將文件和數據移動到NAS的問題。這導致了一些問題。我想檢測網絡光盤用戶是否將文件和數據移動到NAS上。我想從C#程序中以編程方式執行此操作。我想提醒他們,此舉可能會導致問題。這可能嗎?我發現沒有辦法通過C#/ .Net來判斷網絡驅動器是NAS還是不是,但是我還沒有發現有人說它不能完成。 有沒有什麼辦法來確定網絡驅動器是否是編程的NAS?我可以檢測網絡光盤是否爲NAS(網絡附加存儲)?


我修改了我的問題。 但是,我已經和人們討論過這個問題,我不相信網絡磁盤是NAS的問題是一個問題。感謝您在這裏的評論,我問了幾個問題,結果發現我們正在談論不同的事情。無論使用什麼類型的網絡存儲,問題可能都是相同的。 但是出於好奇,是否有可能通過編程的方式判斷網絡光盤是否是NAS?

+2

這聽起來像一個XY問題。你爲什麼要專門尋找NAS? SAN計數是否也一樣?或者任何SMB兼容存儲?外部存儲怎麼樣?什麼是實際問題? – CodeCaster

+1

你的意思是你想檢測到選定的目標位於網絡驅動器或本地磁盤上?如果是這樣的話:https://stackoverflow.com/questions/4396634/how-can-i-determine-if-a-given-drive-letter-is-a-local-mapped-usb-drive – RvdK

回答

2

你需要這三樣東西結合在一起:

How can I determine if a string is a local folder string or a network string?Get the drive letter from a path string or FileInfoHow can I determine if a given drive letter is a local/mapped/usb drive?

所以:

string path = "\\some-unc-path\file.txt"; // or: @"H:\file2.txt" for mapped network drives 

if (new Uri(path).IsUnc) 
{ 
    // network 
} 
else 
{ 
    var fileInfo = new FileInfo(path); 
    var driveLetter = Path.GetPathRoot(fileInfo.FullName); 
    var driveInfo = new DriveInfo(driveLetter); 
    if (driveInfo.DriveType == DriveType.Network) 
    { 
     // network 
    } 
} 

只是出於好奇,纔有可能告訴如果網絡光盤是編程的NAS?

不,這是抽象的奇蹟。您將SMB與設備交談,它會向SMB回覆。任何能夠與SMB對話的設備都可以放在另一端,無論是Windows或Linux服務器,臺式機,NAS,SAN,甚至是路由器和電視機,都可以通過現在的SMB來訪問,以便插入USB驅動器並將其暴露出來通過您的家庭網絡。

可以檢測NAS通過探測衆所周知的端口,其中的NAS承載SMB之外,額外的服務,比如他們(網絡)管理界面,看到他們回來的東西,但我不會去那裏,因爲我止跌不知道會解決什麼問題。