electron 无法在Windows保存文件对话框中将默认过滤器设置为“所有文件(*.*)”

vd8tlhqk  于 5个月前  发布在  Electron
关注(0)|答案(3)|浏览(46)

预检清单

  • 我已阅读了此项目的 Contributing Guidelines
  • 我同意遵循此项目遵循的 Code of Conduct
  • 我在问题跟踪器中搜索了一个与我想提交的功能请求相匹配的问题,但没有成功。

问题描述

在 Windows 中,无法将保存文件对话框的默认过滤器设置为 All Files (*.*) 。这很麻烦,因为通常当你想保存一个没有/未知扩展名的文件(如 .babelrc )时,它会附加第一个过滤器的扩展名。例如:microsoft/vscode#28425

我知道这是故意不允许的,就像 shell/browser/ui/file_dialog_win#L206 中所示:

// By default, *.* will be added to the file name if file type is "*.*". In
// Electron, we disable it to make a better experience.
// ...
for (size_t i = 0; i < filterspec.size(); ++i) {
	if (std::wstring(filterspec[i].pszSpec) != L"*.*") {
		// SetFileTypeIndex is regarded as one-based index.
		dialog->SetFileTypeIndex(i + 1);
		dialog->SetDefaultExtension(filterspec[i].pszSpec);
		break;
	}
}

它基本上选择了第一个过滤器作为默认值,除了 All Files 过滤器 ,因为据说它会将 *.* 附加到文件名上。然而,必须有一种方法可以做到这一点,因为其他程序可以这样做(不幸的是,我想不出任何开源程序,我们可以查看源代码)。

建议的解决方案

目前没有真正准备好的解决方案。只需要弄清楚如何允许它并避免这个问题。也许如果我们不是将默认扩展名设置为 "*.*" 而是在 All Files 过滤器使用时将其设置为 "" ,我们就可以同时实现这两个功能。

考虑过的替代方案

验证 *.* 附加到文件名 的问题是否真的发生。如果没有发生,我们可以直接剪切代码。

其他信息

示例:https://gist.github.com/e9cf0de5417180669245e79b10c2f898

irlmq6kh

irlmq6kh1#

在这里也存在同样的问题。

kq0g1dla

kq0g1dla2#

在Mac上,它运行正常,而在Windows上,它总是显示"All files *"。

在这个演示中,我在electron中使用了URL( https://codepen.io/tongdada-the-sans/pen/OKjxgJ )。

图片:

关于如何解决这种情况,我找到了一个解决方案,就是在文件名后添加一个后缀,尽管它的名称已经有一个.ext。请看下面的示例。

在Windows 10上,我们可以在文件名后添加两个ext,但是系统选择的saveFiledialog总是显示一个All type(*)。我不知道如何解决这个问题。

llmtgqce

llmtgqce3#

这是一个巨大的问题,尤其是在VS Code中。由于它将未知新文件的默认文件类型设置为“纯文本(*.txt)”,用户在保存以查找重复项、遵循命名模式或单击现有文件作为模板并重命名等时,无法在现有目录中看到任何文件。
(我来自6年前的这个VS Code错误报告) microsoft/vscode#28425
当然,这可以在Electron中解决,但如果不能解决,那么这感觉就像是另一个迫切需要AHK脚本的需求。

相关问题