2012-05-12 74 views
1

我正在使用CLI/CLR和非託管代碼,但這個問題與CLI/CLR部分有關,並且我觀察到了與C#代碼相同的行爲。SaveFileDialog中的非標準文件擴展名CLI/CLR/C#

我試圖用不符合標準文件擴展名規則的傳統文件名保存文件。 文件擴展名爲「-C2.txt」,不幸的是,當我使用SaveFileDialog :: Filter方法時,文件名不包含「-C2」部分。 SaveFileDialog中是否有解決此問題的方法?

SaveFileDialog^ cDlg = gcnew SaveFileDialog; 
cDlg->Filter = "csv file (*.csv)|*.csv|-C2.txt file (*-C2.txt)|*-C2.txt|All Files (*.*)|*.*"; 

例子:

  1. 在SaveFileDialog框我選擇現有文件「File01.csv」,然後被放置在現有的「文件名」文本框中的SaveFileDialog對話框。

  2. listView框僅顯示適合過濾器的文件,例如,只顯示* -C2.txt文件而不顯示* .txt文件。

  3. 但是,我將「Save as type:」組合框更改爲「-C2.txt」,新文件名爲「file01.txt」,而不是「file01-C2.txt」。

+1

'-c2.txt'不是擴展名,'.txt'部分是...文件擴展名被定義爲文件名後的最後一部分,包括名稱中的最後一個'.'。 –

+0

對。只需使用.c2txt作爲擴展。三字母擴展可以避免遺留短名稱支持帶來的晦澀問題,所以請毫不猶豫地選擇.c2t。 –

回答

1

不,沒有辦法讓對話框爲你做到這一點。正如Jeff Mercado所說的「-ct.txt不是擴展名,.txt部分是......」。

我可以爲您提供最好的解決辦法是改變自己所選擇的文件路徑,像這樣

string strFullPath = FileBrowser.Filename; // Has your "SomeFile.txt 
string[] strTmpArr = strFullPath.Split('.'); 
strFullPath = String.Format("{0}-C2.txt", strTmpArr[0]); 

注意這是假定你沒有「」文件路徑中的任何其他位置。您不能使用Path.ChangeExtension(),因爲您的-C2.txt將被製作爲.-C2.txt

我希望這會有所幫助。

+0

是的,我正在思考所有這些問題,看起來我必須給用戶一些關於保存這種特定類型文件的更多細節。問題是「-C2.txt」是另一個遺留代碼(不是我的)使用的特定僞代碼擴展,遺留代碼極其不友好。對他們來說很失望,哈哈。 –