2012-05-24 88 views
4

手動映射網絡驅動器Y://對我的系統.Drive具有Manny文件夾,每個文件夾都包含與文件夾相同的單個XMl文件。如何使用C#代碼訪問共享網絡驅動器文件

這裏我試圖從網絡位置讀取Xml文件。但它給予例外目錄未找到。下面的代碼我正在使用。

    Fname = txtwbs.Text;   
       DirectoryInfo objDir = new DirectoryInfo("Y:\\");  

       \\Y:\\ 
       protected void ImageButton1_Click(object sender, ImageClickEventArgs e) 
       { 
       _xmlpath = objDir + "\\" + Fname + "\\" + Fname + ".xml";   
       if (File.Exists(_xmlpath))   
        {   
        reader(_xmlpath);   
        } 
       } 

這裏Fname是文件夾名稱也是Xml名稱。無論用戶輸入文件的名稱。

+0

是否在DirectoryInfo行或_xmlpath之後拋出異常? – ewanm89

+1

此外,爲了更好的編碼風格,嘗試在構建路徑時使用'Path.Combine'。例如。 'Path.Combine(objDir,Fname,Fname +「.xml」)' – MichelZ

+0

@MichelZ:當然 –

回答

0

使用此API。 http://www.codeproject.com/Articles/6847/Map-Network-Drive-API

這是我設法在代碼中完成的唯一方法。 只需修改該類,以適合您的項目。

+0

此解決方案僅適用於映射。我已經手動映射驅動器..不需要編碼。只有我需要從映射驅動器或直接從共享文件夾重新讀取文件和文件夾結構。 –

+0

是的,我知道,但使用'using'語句,然後讀取使用塊內的文件。這是它允許我與用戶模擬一起從網絡驅動器讀取文件的唯一方式。 –

+0

o k ..我正在嘗試.. –

2

理想情況下,您應該使用UNC Path來訪問這些文件。 \\server\share\path\to\file

+0

同樣的事情我以前用過但沒有成功 –

3

你有這篇文章標籤爲asp.net和asp-classic。從你的代碼示例中,我猜asp-classic不適用。

如果您在ASP.Net中運行,系統不會知道您創建的映射驅動器。您應該使用UNC路徑。如果您沒有使用Windows身份驗證運行該站點,則還需要模擬有權訪問該共享的人員,因爲您的匿名用戶很可能會收到「拒絕訪問」錯誤。

最後,我不認爲你需要的DirectoryInfo的呼叫 - 使用Path.Combine()

0

使用UNC路徑,而不是網絡驅動器,並確保運行你的應用程序的用戶有權訪問該文件夾這是內容。 「文件未找到」可能意味着錯誤的權限或路徑錯誤。

+0

我有完全訪問particaular文件夾.. –

1

身份冒充做的伎倆,我

...... 

<system.web> 
<identity impersonate="true" userName="yourdomain\yourusername" 
    password="yourpassword" /> 
...... 
...... 
10

抓住這個代碼:http://pastebin.com/RZnydz4Z

然後在您的global.asax的的Application_Start把這個:

protected void Application_Start(object sender, EventArgs e) 
{ 
    Utilities.Network.NetworkDrive nd = new Utilities.Network.NetworkDrive();   
    nd.MapNetworkDrive(@"\\server\path", "Z:", "myuser", "mypwd"); 
} 

那麼就使用像一個正常的網絡驅動器,像這樣:

File.ReadAllText(@"Z:\myfile.txt"); 
+0

工作就像一個魅力:) – tigrou