2012-07-06 21 views
11

我已經做了一個小應用程序,在Win7-PC上運行。它所做的一切就是在凌晨1:00檢查網絡驅動器的內容(並將其與本地硬盤上的文件夾進行比較),如果有差異,請將差異複製到此文件夾。應用程序說網絡驅動器不存在,但發現使用OpenFileDialog

問題是,有時它找不到網絡驅動器。

當應用程序啓動時,使用啓動OpenFileDialog的應用程序上的按鈕找到網絡驅動器,並將生成的驅動器盤符放入按鈕旁邊的文本框中。從這一點來看,它應該只是自行運行。 PC從未關閉。

當它表示無法找到網絡驅動器時,我可以手動按下同一個應用程序上的按鈕,在OpenFileDialog中選擇驅動器(驅動器盤符永不更改),並且應用程序將在一對情侶中完美無缺地運行的日子。然後問題再次出現。

問題是:爲什麼可以通過我的應用程序中的OpenFileDialog訪問網絡驅動器,但我的應用程序不能?以確定驅動器是否存在或不存在:

我的應用程序使用此功能(稱爲用「\ Y」):開始複製過程

public bool fn_drive_exists(string par_string) 
    { 
     DirectoryInfo di_dir = new DirectoryInfo(par_string); 
     if (di_dir.Exists) 
     { 
      return true; 
     } 

     return false; 
    } 

...有時就返回一個錯誤,直到我使用OpenFileDialog「喚醒它」。

OpenFileDialog做什麼,我的應用程序沒有?

+3

你怎麼樣在'\\服務器\ sharedFolder'而不是映射的網絡驅動器'ÿ通:'?它有同樣的問題嗎? – 2012-07-06 04:56:56

+0

另外,嘗試把周圍fn_drive_exists一些重試邏輯(也許循環5次,每環路6秒延遲)。 – 2012-07-06 04:59:11

+1

聽起來像UNC路徑將工作你的情況。看到這個[SO後(http://stackoverflow.com/questions/133660/how-can-i-access-a-mapped-network-drive-with-system-io-directoryinfo) – 2012-07-06 05:07:43

回答

1

根據SO post,如果使用UNC路徑而不是映射網絡驅動器,問題應該消失。

0

如果你的目的地有一個靜態IP地址,我建議你使用的是IP地址而不是域名的網絡驅動器

0

This SO post描述了類似的場景,你所描述的東西。

作爲對該問題的迴應發佈的鏈接之一導致我到this MSDN article,它提供了各種原因,爲什麼在嘗試通過映射驅動器號訪問共享網絡驅動器時可能會遇到錯誤。

微軟的建議(見下文)只是簡單地使用UNC路徑。

必須訪問遠程資源的服務(或運行在不同安全上下文中的任何進程)應使用通用命名約定(UNC)名稱來訪問資源。

爲了更具體地回答您的實際問題,關於爲什麼突然不能訪問網絡共享,我冒昧猜測說,網絡共享正在由Windows斷開由於空閒超時,如KB297684中所述。任何嘗試訪問已斷開連接的驅動器都會遇到一個小問題,因爲重新建立與網絡共享的連接,這可能是導致問題的原因。

爲了驗證這一理論,嘗試在一個相對較短的時間間隔某些數據寫入到網絡驅動器上的文件(每次10分鐘,也許?),試圖說服的Windows該驅動器仍然有效。

0

您也可以嘗試使用:

System.IO.Directory.Exists(par_string); 

,而不是寫你自己的方法爲同樣的事情。我希望框架方法能夠「喚醒」網絡驅動器。 注意:方法也適用於UNC路徑(類似於\\<server name or IP address>\<shared folder>

0

與Harvey說的一樣,使用UNC路徑訪問該文件夾,例如\\ server \ sharedfolder。代替\\服務器使用服務器的名稱。你的電腦有一個名字,服務器也有名字。如果您知道,也可以使用IP地址。將\ sharedfolder替換爲文件的路徑。一些例子:

\\ AppsServer \ C $ \ Program Files文件(x86)的

\\ FileServer1 \ d $ \用戶\約翰\ My Documents文件

的C $表示C盤是共享文件夾。如果整個驅動器不共享,則需要共享特定的文件夾。您可以通過登錄到服務器,右鍵單擊該文件夾並選擇「屬性」來完成此操作。然後,您轉到「共享」選項卡並選中「共享此文件夾」複選框。如果你的共享文件夾名爲MyShare中,然後訪問該文件夾的UNC路徑將是

\\服務器\ MyShare中

相關問題