【问题标题】:Non standard file extensions in SaveFileDialog CLI / CLR / C#SaveFileDialog CLI / CLR / C# 中的非标准文件扩展名
【发布时间】:2012-05-20 21:47:17
【问题描述】:

我正在使用 CLI/CLR 和非托管代码,但这个问题与 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. 但是,我将“保存类型:”组合框更改为“-C2.txt”,新文件名为“file01.txt”而不是“file01-C2.txt”。

【问题讨论】:

  • -c2.txt 不是扩展名,.txt 部分是... 文件扩展名被定义为文件名的最后一部分,在名称中包含最后一个 . .
  • 对。只需使用 .c2txt 作为扩展名。三个字母扩展名避免了遗留短名称支持的晦涩问题,因此请不要犹豫选择 .c2t。

标签: c# c++-cli command-line-interface


【解决方案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

我希望这会有所帮助。

【讨论】:

  • 是的,我的想法与所有这些相同,看来我必须向用户提供有关保存这种特定类型文件的更多详细信息。问题是“-C2.txt”是另一个遗留代码(不是我的)使用的特定伪扩展,并且遗留代码对用户非常不友好。真可惜,哈哈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多