2012-07-15 32 views
4

我想寫一些數據到C#與COM的Excel,但我有一個問題保存。讓我們來看看代碼:在C中的斜槓和逃逸問題#

  1. workSheet.SaveAs("c:/users/amare/sub.xls"); 
    

    上面的代碼將導致錯誤:

    "Microsoft Excel can't open the file c://users/amare/sub.xls."

    但下面的代碼工作正常:

  2. workSheet.SaveAs("c:\\users/amare/sub.xls"); 
    
  3. workSheet.SaveAs(@"c:\users\amare\sub.xls"); 
    

現在我對這種情況很困惑。我知道,2),3)是絕對正確的,但我已經習慣了編寫代碼就像1):

StreamWriter sw = new StreamWriter("c:/users/amare/desktop/file.txt"); 
sw.WriteLine("foo-bar"); 
sw.close(); 

這一直工作正常。所以我想知道爲什麼它不這樣做。顯然,C#在1)中錯誤地轉義了路徑。

+5

「c:/ users」不是有效的Windows路徑。 – 2012-07-15 09:09:09

+0

如果從這個路徑「c:/ users」開始運行,它是有效的路徑 – HatSoft 2012-07-15 09:11:05

+0

我個人比較討厭使用正斜槓作爲本地路徑。本地路徑 - 反斜線。 Web路徑 - 正斜槓。 – GSerg 2012-07-15 09:12:07

回答

4

顯然workSheet.SaveAs()做了自己的驗證和修復路徑。所以你(正確)因使用無效格式而受到懲罰。該格式通常被接受,但「通常」與「始終」不一樣。

+0

我明白了。我從現在開始採用正確的風格。 – ChandlerQ 2012-07-15 09:26:49

1

我已經嘗試過你的路徑,並且肯定會失敗,並顯示一條消息,指出該路徑無效或不可寫。我也嘗試在Documents子文件夾(授予寫入權限)內寫入文件,但又出現相同的錯誤。所以這在Excel互操作的解析器中是一個明確的問題。我認爲,在Windows中,你應該避免這個路徑分隔符。

如果您使用的定義與@焦炭

workSheet.SaveAs(@"c:\users\amare\sub.xls"); 

所有的作品如預期前綴字符串verbatim strings

+0

這已經在問題中了。 – 2012-07-15 09:09:27

+0

感謝您的再現問題。我將使用@ char。 – ChandlerQ 2012-07-15 09:30:09

+0

@HenkHolterman,你照例是正確的,但'SaveAs'給出的錯誤信息有點不清楚。所以我試圖測試它是否連接到寫入用戶文件夾根目錄所需的權限。 – Steve 2012-07-15 09:30:52