2011-03-18 60 views
1

我試圖將文件複製到映射驅動器上的聯網文件夾。我在我的命令行中測試了COPY,所以我想我會嘗試在C#中自動化該過程。C#中的網絡COPY命令 - 找不到文件?

ProcessStartInfo PInfo; 
Process P; 
PInfo = new ProcessStartInfo("COPY \"" + "c:\\test\\test.txt" + "\" \"" + "w:\\test\\what.txt" + "\"", @"/Z"); 
PInfo.CreateNoWindow = false; //nowindow 
PInfo.UseShellExecute = true; //use shell 
P = Process.Start(PInfo); 
P.WaitForExit(5000); //give it some time to finish 
P.Close(); 

拋出一個例外:System.ComponentModel.Win32Exception(0x80004005的):該系統找不到指定的文件

我缺少什麼?我需要爲命令參數添加其他內容嗎?

我試過File.Copy,但它似乎不起作用(File.Exists("<mappeddriveletter>:\\folder\\file.txt");)帶來了錯誤。

+0

'File.Exists(「\\ server \ file.txt」)'當然,這將返回false。你需要跳過你的反斜槓,或使用'@'-string:'File.Exists(@「\\ server \ file.txt」)' – 2011-03-18 16:19:29

回答

2

這SO帖子包含一個例子

Run Command Prompt Commands

怎麼做是正確的。您需要撥打cmd.exe並將/c copy作爲參數。

+0

謝謝你的鏈接。這工作! – MHTri 2011-03-18 16:38:22

1

使用File.Copy會不會更容易?

+0

我應該在我的問題中澄清 - File.Copy不會出現通過網絡共享工作...或者至少,我無法實現它的工作。 – MHTri 2011-03-18 16:17:22

+0

如果我們使用驅動器的共享映射,我們已經看到了一些與File.Copy不一致的行爲,所以我們使用完全限定的網絡名稱,這可能對您更好。應該是像\\ sharedServer.company.internal \目標 – BrMcMullin 2011-03-18 16:42:47

2

那麼,對於技術位:copy本身不是一個可執行文件,而只是一個由cmd解釋的命令。所以基本上,你必須啓動cmd.exe作爲一個進程,並將其傳遞給一個標誌,使其運行copy命令(您還必須提供該參數作爲參數)。

無論如何,我願意與Promit一起,並建議調查File.Copy或類似的東西。

e:啊,當我發佈這個時,錯過了你對Promit的答案的評論。

+0

啊是的,這是有道理的,因爲進程試圖找到程序「COPY等等等等」,而不是「cmd.exe」,所以它顯然會返回文件不是發現,我只是沒有把它解釋爲C#沒有找到該程序而不是要複製的文件。 – MHTri 2011-03-18 16:31:01