关于PySide2的QFileDialog保存文件的重名不覆盖问题
最近在使用PySide2开发时出现了一个问题,当我导出文件时,如果存在同名文件的情况下,我依旧以同名保存,正常效果应该是新保存的文件会将旧文件覆盖掉,只留下新的文件。
但是我的代码效果却出现了以下情况:
正常save文件是成功的,没有报错,但是当我进入文件夹查看时却发现,那个同名文件的保存日期显示它依然是原来的那个旧文件,新保存文件并没有将它覆盖掉。
那么问题来了,既然没有报错,那我新的文件哪里去了呢?
查看整个文件夹后发现,哦,新文件确实导出了,但是,它完全没有了后缀名。要是我手动给它加一个后缀,即
filePath = filePath + ".txt"
它又以给自己已有后缀的文件名的情况下,又再追加一个后缀名的形式给导出了。
这是我的代码:
filePath, fileType = QFileDialog.getSaveFileName(self, self.tr("export file"), '',
self.tr("txt (*.txt)"), options=QFileDialog.DontUseNativeDialog)
一番检查尝试后发现,就是因为使用了options属性,DontUseNativeDialog会导致使用的是PySide2自带的文本对话框,而非直接调用本地文件资源管理器。电脑的文本资源管理器是自带了重名覆盖的功能的,所以我们导出文件正常。
但是我因为某些原因必须使用DontUseNativeDialog(其实是如果不加参数,调用文本对话框的时候会导致软件崩溃,加上参数可以规避这种情况),就只能自己手动规避了,自己对其做一层判断,检查过后终于生效。
filePath, fileType = QFileDialog.getSaveFileName(self, self.tr("export file"), "", self.tr("txt (*.txt)"),
options=QFileDialog.DontUseNativeDialog)
if not filePath:
return
if fileType == "txt (*.txt)" and filePath[-4:] != ".txt":
filePath = filePath + ".txt"
这个方法虽然笨了点,但是有效,先记录下来。
如果有朋友能给我提供更好的思路,欢迎留言。