如何让写入文件不进行缓冲区处理?

也可以清心 2004-12-23 06:01:05
如何让写入文件不进行缓冲区处理?


对文件进行操作时,系统会进行一定的缓冲处理,现在遇到这样的问题:
修改U盘文件内容,程序退出后直接打开文件看到写入内容正确;
但立即拔出U盘后再插回U盘,发现写入的数据丢失了,U盘文件内容恢复到写入前状态。
我试过用fopen()、fwrite()、fflush()/flushall()、fclose()方式;
拷贝临时文件,DeleteFileU盘文件再复制等方法,都没有任何效果。

是否有有效的直接写入U盘文件内容的方法?或是其他什么等效的解决办法?
非常感谢
...全文
283 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
也可以清心 2004-12-24
  • 打赏
  • 举报
回复
感谢各位参与,谢谢

这个帖子应该能提交FAQ吧?呵呵
oyljerry 2004-12-24
  • 打赏
  • 举报
回复
嗯,可能与驱动有关了
hjunxu 2004-12-24
  • 打赏
  • 举报
回复
对U盘这种特殊设备进行文件操作,不同与硬盘,有设备自己的缓冲时间,这应该是取决于设备或驱动的,系统、程序对此都无能为力。

我觉得你说的非常有道理啊。
也可以清心 2004-12-24
  • 打赏
  • 举报
回复
我作了这样的操作:不执行任何程序,直接在Windows中写U盘中文件的内容,保存关闭后,短时间内拔掉U盘,再插回,数据丢失。
所以我认为,对U盘这种特殊设备进行文件操作,不同与硬盘,有设备自己的缓冲时间,这应该是取决于设备或驱动的,系统、程序对此都无能为力。
不知道我想的对不对
PS:没意外的话,下午结贴。
也可以清心 2004-12-24
  • 打赏
  • 举报
回复
有没有熟悉U盘操作的啊?给点针对U盘的知道吧,再次谢谢了
也可以清心 2004-12-24
  • 打赏
  • 举报
回复
我试了FlushFileBuffers()函数:CreateFile、WriteFile、FlushFileBuffers、CloseHandle
这样执行之后,立即去U盘打开文件,看到写入成功了。
但是,立即拔出U盘,再插回,看到U盘上写入的文件又没了。
我现在怀疑是不是U盘真的也有自己的缓存系统,这样,表面上看是写入了,但实际仍在缓存中呢。
真是没办法了。
Mr-Chen 2004-12-23
  • 打赏
  • 举报
回复
驱动
直接写入端口
qrlvls 2004-12-23
  • 打赏
  • 举报
回复
不知道有没有搞FS Driver的兄弟来看看
danyueer 2004-12-23
  • 打赏
  • 举报
回复
采用内存文件的办法,参考CreateFileMapping
qrlvls 2004-12-23
  • 打赏
  • 举报
回复
FlushFileBuffers

The FlushFileBuffers function flushes the buffers of the specified file and causes all buffered data to be written to the file.

wujian53 2004-12-23
  • 打赏
  • 举报
回复
呵呵, 这不一定是系统的缓冲;
也许U盘驱动也来各缓冲;
恐怕你是无可奈何;
要不你试试_lopen, _lclose系列;
或者CreateFile...
liudancodeman 2004-12-23
  • 打赏
  • 举报
回复
友情帮顶!!!!!!!!!!!!!!!!!

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧