去fyne过滤器,即使我使用错误的后缀,程序也创建一个空文件与我写的名称



我刚开始学的很好。

我写了一个函数来保存我在编辑中写入的字节,菜单名称为savea。

我还设置了一个过滤器,以确保我只能保存以.md结尾的文件。所以我点击SaveAs btn,输入名称为1.txt,当我点击btn,错误窗口将出现,但程序也创建了1.txt在我的文件路径

func (app *config) saveAsFunc(win fyne.Window) func() {
return func() {
saveDialog := dialog.NewFileSave(func(write fyne.URIWriteCloser, err error) {
if err != nil {
dialog.ShowError(err, win)
return
}
if write == nil {
return
}
if !strings.HasSuffix(strings.ToLower(write.URI().String()), ".md") {
dialog.ShowInformation("Error", "Please name your file end with .md", win)
return
}
//保存文件
write.Write([]byte(app.EditWidget.Text))
app.CurrentFile = write.URI()
defer write.Close()
win.SetTitle(win.Title() + " - " + write.URI().Name())
app.SaveMenuItem.Disabled = false
}, win)
saveDialog.SetFileName("untitled.md")
saveDialog.SetFilter(filter)
saveDialog.Show()
}
}

输入图片描述

就像这样,我的错误窗口可以出现,但也创建错误的文件

我尝试dubug,但是当我运行到这个函数时,goland将崩溃。这段代码是我从视频里学的。可能是更新了新版本导致了这个问题

我发现问题是文件浏览器在fyne,它有一个默认的btn名为保存,当我写一个错误的文件名,然后我点击这个保存btn,它会保存一个文件使用错误的名称,然后我的过滤器将停止保存并返回,所以文件只有名称,但没有任何内容。

所以现在的问题是如何在保存BTN工作前停止保存,我应该改变代码吗?

当从文件保存对话框中调用回调时,用户指定的文件已经创建,并且准备好让您写入数据。

如果您想要反转操作,您将需要write.Close()并调用storage.Delete(write.URI())。这将删除用户要求创建的文件。

您可能正在寻找这个建议的增强:https://github.com/fyne-io/fyne/issues/1044

相关内容

最新更新