2010-10-06 227 views
3

我有一個程序,做不同的事情,我的問題是訪問網絡映射驅動器或共享文件夾檢查文件是否是共享網絡驅動器上accessable

程序可以運行一個文件MSI文件相關的/ EXE從網絡(網絡映射驅動器或共享文件夾) 程序可以從網絡複製文件(網絡映射的驅動器或共享文件夾)

如何在我嘗試運行之前檢查文件是否可訪問或複製(在網絡斷開或其他網絡問題的情況下)?

是它足以與File.Exists();

這裏是我的代碼示例:

public static bool FileIsOk(string path) 
{ 
    try 
    { 
     FileInfo finfo = new FileInfo(path); 

     if (finfo.Exists) 
     { 
     return true; 
     } 
     MessageBox.Show("file does not exist, or there is a problem with the network preventing access to the file!"); 
     return false; 
    } 

    catch (Exception e) 
    { 
     MessageBox.Show(e.Message); 
    } 
    return false; 
} 

感謝

+0

File.Exists()將是要走的路,除非你需要檢查某些權限? – Tim 2010-10-06 12:50:44

+0

檢查文件/文件夾權限:http://stackoverflow.com/questions/3456397/checking-file-folder-access-permission/3456514 – Rox 2010-10-06 12:52:51

回答

5

File.Exists()應該是好的,但如果你開始一個大的拷貝操作,如果連接在該過程中出現故障有沒有很多可以做,所以你要確保你代碼。

您應該陷入IOException並按照您認爲合適的方式處理它。

編輯:代碼捕獲IOException異常:

try 
{ 
    File.Copy(myLocalFile, myNetworkFile); 
} 
catch (IOException ioEx) 
{ 
    Debug.Write(myLocalFile + " failed to copy! Try again or copy later?"); 
} 
+0

這些文件很小,但您能否提供一個關於如何捕獲IOException的示例? – 2010-10-06 13:06:27

+0

是的,請參閱我的編輯一個簡單而快速的示例。 – 2010-10-06 14:43:18

1

最好的辦法,當然是創建安裝的本地緩存。你不能相信網絡連接。他們在手術過程中可能會放慢或中斷。如果一切從網絡運行,我會說,這絕對不是一個想法。

但就技術問題而言,File Exists應該沒問題。已經討論了一個更具描述性的想法來檢查文件的存在。 Read here

FileInfo fi = new FileInfo(@"\\server\share\file.txt"); 
bool exists = fi.Exists; 
+0

如何緩存文件? – 2010-10-06 13:02:18

+0

那麼,緩存文件意味着您必須將執行過程中需要的文件複製到本地臨時文件夾中。如果您有一個提供複製到本地臨時文件夾功能的框架,請使用它。如果沒有,請創建一個臨時文件夾,並將這些文件從網絡位置一個接一個地複製到該文件夾​​中,以維護原始文件夾結構。然後使用這些本地文件。使用完成後,刪除您創建的本地臨時文件夾(除非您有其他用途)。閱讀本文以理解複製 - http://msdn.microsoft.com/en-us/library/cc148994.aspx – Nayan 2010-10-06 13:22:18

3

不要。只是嘗試操作。它會失敗的速度一樣快,而且你不會引入時間窗口問題。無論如何,你必須應付這種失敗,爲什麼要編碼兩次?

相關問題