首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Win32 GetSaveFileName()返回非零,但文件未保存?

GetSaveFileName() 是 Win32 API 中的一个函数,用于弹出一个“保存文件”对话框,让用户选择一个文件名和位置来保存文件。如果函数返回非零值,通常意味着用户已经选择了文件名并点击了“保存”按钮。然而,有时候文件并没有真正被保存,这可能是由以下几个原因造成的:

原因分析

  1. 文件路径问题:用户可能选择了一个无效的路径或者驱动器不可写。
  2. 权限问题:当前用户没有足够的权限在指定位置保存文件。
  3. 磁盘空间不足:目标磁盘没有足够的空间来保存文件。
  4. 应用程序错误:在调用 GetSaveFileName() 之后,应用程序可能没有正确地执行保存操作。
  5. 对话框取消:尽管函数返回非零,但用户可能在对话框关闭前取消了操作。

解决方案

  1. 检查文件路径: 确保用户选择的路径是有效的,并且应用程序有权限写入该路径。
  2. 检查文件路径: 确保用户选择的路径是有效的,并且应用程序有权限写入该路径。
  3. 检查磁盘空间: 在保存文件之前,检查目标磁盘是否有足够的空间。
  4. 检查磁盘空间: 在保存文件之前,检查目标磁盘是否有足够的空间。
  5. 确保正确的保存逻辑: 确保在调用 GetSaveFileName() 之后,应用程序正确执行了保存文件的逻辑。
  6. 确保正确的保存逻辑: 确保在调用 GetSaveFileName() 之后,应用程序正确执行了保存文件的逻辑。

应用场景

GetSaveFileName() 通常用于需要让用户选择文件保存位置和名称的应用程序中,例如文本编辑器、图像处理软件、文档管理工具等。

参考链接

通过上述分析和解决方案,您可以更好地理解和解决 GetSaveFileName() 返回非零但文件未保存的问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么使用SaveFileDialog创建文件需要删除权限?

假设有一个文件夹,用户有几乎所有权限,没有删除的权限,如下图所示: ? 这时候使用SaveFileDialog在这个文件夹里创建文件居然会报如下错误: ? 这哪里是网络位置了,我又哪里去找个管理员?...更奇怪的是,虽然报错了,文件还是会创建出来,不过这是个空文件。不仅WPF,普通的记事本也会有这个问题,SaveFileDialog会创建一个空文件,记事本则没有被保存。具体可以看以下GIF: ?...// // 摘要: // 获取 Win32 通用文件对话框标志,文件对话框使用这些标志来进行初始化。...// // 返回结果: // 一个包含 Win32 通用文件对话框标志的 System.Int32,文件对话框使用这些标志来进行初始化。...解决方案 SaveFileDialog本身只是Win32 API的封装,我们可以参考SaveFileDialog的源码,伪装一个调用方法差不多的MySaveFileDialog,然后自己封装GetSaveFileName

87320

Qt的QFile

写入时,行尾终止符将转换为本地编码,例如,对于win32 QIODevice::Unbuffered 设备中的任何缓冲区都被绕过 QFile可以和QTextStream或QDataStream一起使用...;将设备中maxSize字节读入数据保存在data中,并返回读取的字节数;当没有更多数据可供读取时,返回0;读过流的末尾为错误,返回-1 。...如果一行不能被读取,但是没有错误发生,这个函数返回0。如果发生错误,将返回可读内容的长度,如果读,则返回-1,结束的“\0”字节总是附加到数据中,因此maxSize必须大于1。...返回实际写入的字节数,如果发生错误则返回-1。 qint64 write(const char * data) 将以结尾的8-bit字符串中的数据写入设备。...返回实际写入的字节数,如果发生错误则返回-1 写文件例子 qint64 write(const char * data, qint64 maxSize) 的写法 //创建一个QFileDialog来获取保存文件路径

1.8K10
  • PyQt5 文件对话框QFileDialog

    选择文件夹 对话框 QFileDialog.getExistingDirectory() 3个参数分别是父控件、标题、起始路径。返回值是字符串。 2)....选择文件 对话框 QFileDialog.getOpenFileName() 4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是由两个字符串构成的元组。...多个文件选择 对话框 QFileDialog.getOpenFileNames() 4个参数分别是父控件、标题、起始路径、文件扩展名过滤。返回值是共两个元素的元组。...元组第一个元素是文件名列表,第二个是文件类型名。 4). 文件另存为 对话框 QFileDialog.getSaveFileName() 4个参数分别是父控件、标题、起始路径、文件扩展名过滤。...返回值是由两个字符串构成的元组。元组第一个元素是文件名,第二个是文件类型名。 代码如下: ?

    7.2K31

    dotnet 读 WPF 源代码笔记 使用 Win32 方法修改窗口的坐标和大小对窗口依赖属性的影响

    如果未设置标志,则窗口被激活,并被设置到其他最高级窗口或最高级组的顶部(根据参数hWndlnsertAfter设置)。...如果未设置该标志,客户区的有效内容被保存并且在窗口尺寸更新和重定位后拷贝回客户区。 /// SWP_NOMOVE:维持当前位置(忽略X和Y参数)。... /// /// 如果函数成功,返回值为;如果函数失败,返回值为。...如果此时咱点击一下最大化,那么点击修改窗口坐标按钮,是可以修改窗口坐标的,同时窗口的状态依然是最大化。...dotnet/wpf 欢迎大家下载所有源代码 在 src\Microsoft.DotNet.Wpf\src\PresentationFramework\System\Windows\Window.cs 文件里面有以下的定义

    74920

    多线程中的锁系统(三)-WaitHandle、AutoResetEvent、ManualResetEvent

    内核对象为内核所拥有,而不为进程所拥有,所以不同进程可以访问同一个内核对象, 如进程,线程,作业,事件,文件,信号量,互斥量等都是内核对象。   ...对于线程同步操作来说,内核对象只有2个状态, 触发(终止,true)、触发(终止,false)。 触发不可调度,触发可调度。...也可称为阻塞线程同步。 WaitHandle 在windows编程中,通过API创建一个内核对象后会返回一个句柄,句柄则是每个进程句柄表的索引,而后可以拿到内核对象的指针、掩码、标示等。  ...AutoResetEvent waitHandler = new AutoResetEvent(false);//false 即终止,触发。...ManualResetEvent manualWaitHandler = new ManualResetEvent(false);//false 即终止,触发。

    1.5K70

    【Windows编程】系列第八篇:创建通用对话框

    当然除了这些单独的控件之外,对于像文件打开、保存对话框,字体对话,颜色对话框等对于Windows本身会用到,在很多第三方的应用程序中也会用到。...Windows提供的公用对话框在不同的版本有所不一样,常见的公用对话框有:颜色选择对话框、打开文件对话框、保存文件对话框、字体选择对话框、查找对话框、替换对话框、打印对话框以及打印设置对话框等。...lpstrFile:该参数用于保存选择结束后的选择文件。 nMaxFile:该参数指出上面用于保存结果文件的buffer字符长度。 Flags:该参数最常见用于设置是否可以多选,其他请查看MSDN。...文件保存对话框 文件保存对话框跟文件打开对话几乎完全一样,参数相同。功能也是为用户保存文件时选择或新建文件名、保存路径进行选择的公共操作接口。...API函数定义如下: BOOL GetSaveFileName(LPOPENFILENAME lpofn); 该函数的参数与上面完全一样,只是有些不能在文件保存对话框函数中使用,保存文件时不能多选名字。

    1.3K140

    C++ Qt开发:StandardItemModel数据模型组件

    ,此时就可以将文本中的内容映射到组件中,其输出效果如下图所示; 1.3 保存文件 接着我们来看下保存文件与预览TableView视图的实现方法,其实保存文件与预览是一个功能,唯一的区别是保存文件刷新到文件中...,而预览则是刷新到了PlainTextEdit文本框内,其两个本质上是一个功能,此处笔者就以保存文件为例来说明如何实现的。...首先,在代码中同样是获取应用程序路径,同样是打开文件唯一不同的是这里使用了getSaveFileName也标志着是打开一个保存对话框,这里还使用了QFile::Open函数,并设置了QIODevice:...弹出保存文件对话框,让用户选择保存文件的路径和文件名。 如果用户选择文件,则直接退出。 使用 QFile 打开文件,以读写、覆盖原有内容的方式打开文件。...(this,tr("选择一个文件"),curPath,"数据文件(*.txt);;所有文件(*.*)"); if (aFileName.isEmpty()) // 选择文件则直接退出

    34210

    原创:FFI极简应用场景【字符串·传输】浅谈

    一方面,在Cargo.toml中添加libc依赖项·就相当于·在C代码插入一行导入系统头文件的#include语句。 另一方面,libc crate不是系统ABI的跨平台解决方案。...若做win32开发,我还是比较推荐winapi crate。 其次,【Rust字符串】与【C字符串】指的是采用了不同【字节序列·编码格式】的字符串,而不是特指Rust内存里或C内存里的字符串。...它的长度信息被保存于 要么,String智能指针·结构体的私有字段self.vec.len内。 要么,&str胖指针内。 【C字符串】是以\0(或NUL)结尾的,由任意\0字节拼合而成的字节序列。...从【C字符串】向【Rust字符串】的转换是refutable,因为【C字符串】可以是任意的字节序列,而不一定是有效的UTF-8字节数组。 【强调】【C字符串】不是被保存于C内存的字符串。...最后,相对于Vec的Rust内存字节数组,libc::malloc()就是从C内存里圈出一段连续且初始化的内存空间,来保存【字符串·字节序列】。

    89630

    C++ Qt开发:标准Dialog对话框组件

    方法返回用户选择的文件名,如果用户取消了对话框,则返回一个空字符串。你可以根据需要调整过滤器、默认目录等参数,以满足你的具体需求。...getSaveFileName方法来实现,QFileDialog::getSaveFileName 是 Qt 中用于显示保存文件对话框并获取用户选择的文件名的静态方法。...它通常用于在用户将文件保存到磁盘时获取文件保存路径。该方法的参数包括:parent: 对话框的父窗口。传入 nullptr 表示没有父窗口。caption: 对话框的标题。dir: 默认的目录路径。...方法返回用户选择的文件名,如果用户取消了对话框,则返回一个空字符串。你可以根据需要调整过滤器、默认目录等参数,以满足你的具体需求。...+文件(.cpp);;所有文件(*.*)"; // 文件过滤器 QString aFileName=QFileDialog::getSaveFileName(this,dlgTitle,curPath

    50910
    领券