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

rseugnpd  于 2022-12-07  发布在  Go
关注(0)|答案(1)|浏览(113)

我一开始学得很不好。
如果写入一个函数,用于保存在编辑中写入的字节,则菜单名为“另存为”。
我还设置了一个过滤器,以确保我只能保存文件结束。md.so我单击SaveAs按钮,输入名称为1.txt,当我单击按钮时,将出现错误窗口,但程序也在我的文件路径中创建了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()
    }
}

enter image description here
就像这样,我的错误窗口可以出现,但也创建了错误的文件
我试着dubug,但是当我运行到这个函数的时候,goland就会崩溃。我从我学的视频中学到了这个代码。可能是fyne版本的更新导致了这个问题
我发现问题是在fyne的文件浏览器,它有一个默认的btn名为保存,当我写了一个错误的文件名,然后我点击这个保存btn,它会保存一个文件使用错误的名称,然后我的过滤器将停止保存和返回,所以文件只有名称,但没有任何内容。
所以现在的问题是如何在保存btn工作之前停止保存,我应该改变fyne代码吗?

wwtsj6pe

wwtsj6pe1#

当您从文件保存对话框中调用回调时,用户指定的文件已经创建,您可以将数据写入其中。
如果你想反向操作,你需要write.Close()并调用storage.Delete(write.URI())。这将删除用户要求创建的文件。
您可能正在寻找此建议的增强功能:https://github.com/fyne-io/fyne/issues/1044

相关问题