2016-08-08 76 views
-2

我很努力從windows網絡共享讀取文件。 我有安裝網絡共享作爲S: 所以我的代碼看起來是這樣的:std :: fstream在Windows網絡共享

std::fstream in; 
in.open("S:/adir/new folder/afile.txt", std::fstream::in); 
if (in.fail()) 
    throw "failed"; 
... //use in for reading 

當我第一次運行這個程序,它會引發「失敗」。它會一直失敗,直到我瀏覽Windows資源管理器到該目錄,之後,它的工作。

我該如何解決這個問題?

+0

你需要'in.open( 「\\\\ \\服務器共享文件\\」 的std :: fstream的::中);' – DimChtz

+0

驅動可能不是永久性安裝,並通過安裝導航瀏覽器。 – Peter

+0

@Peter有沒有辦法來檢查,它可能是任何由於IT安裝 – Zaiborg

回答

0

爲了打開一個文件,執行代碼的系統應具有在執行時訪問共享或映射的網絡驅動器。

WNetAddConnection2功能使得到網絡資源的連接,並且可以重定向本地設備到網絡資源。

DWORD dwRetVal; 
NETRESOURCE nr; 
DWORD dwFlags; 

// Zero out the NETRESOURCE struct 
memset(&nr, 0, sizeof (NETRESOURCE)); 

nr.dwType = RESOURCETYPE_ANY; 
nr.lpLocalName = <name of a local device>; 
nr.lpRemoteName = <network resource to connect to>; 
nr.lpProvider = NULL; 

dwFlags = CONNECT_UPDATE_PROFILE; 

// Call the WNetAddConnection2 function to assign 
// a drive letter to the share. 
dwRetVal = WNetAddConnection2(&nr, 
           <password to be used>, 
           <a user name>, 
           dwFlags); 

if (dwRetVal == NO_ERROR) 
    // Success ... 
    // Now you can open the file 
else 
    // Failed ... 
+0

對於某些共享,「用戶名」和「密碼」是Windows憑據,對於其他用戶別的東西。如何獲取這些信息(以及爲什麼因爲Windows資源管理器已經知道這些信息)? – Zaiborg