优盘中放着图像数据,我的程序运行后按显示按钮,就从直接优盘中读取数据,而非从操作系统的缓冲区中读即是按下按钮后刷新系统缓冲区中的优盘数据。用VC如何实现?

解决方案 »

  1.   

    在Windows下,优盘写保护状态下,我修改优盘卷标或优盘中的文件,提示失败后,数据会刷新。但是如果没有写保护的情况下,修改成功则数据不刷新。而我必须在优盘没有被写保护的情况下刷新优盘在系统缓冲区中的数据。因为我还要对优盘进行写操作。
    请高手赐教
      

  2.   

    我的设备很慢每次访问他都需一定时间(那是我需要的)。
    在Windows下我们第一次访问USB时是将USB的内容复制到Windows下的一个缓冲区,以后对USB的访问都是访问这个缓冲区,所以造成了后面访问设备时速度都很快,因为他不是直接访问设备。
    现在我就是想要每次都要去访问USB设备,而不是访问Windows下的缓冲区,该怎么实现呢?(明白我的意思了吗?)
      

  3.   

    按照楼上风格:
        你的 buffer 是直接文件吗?如果是的话刷新前再拷贝一次。
        你的 buffer 是数据吗?如果是的话刷新前再Load一次。明白我的意思吗?好像没什么难得。
      

  4.   

    怎么刷新啊?
    我是读USB里的文件啊,例如USB设备里有个文件a.bin,USB盘符为G
    CFile file
    file.Open("G:\\a.bin",CFile::modeRead);
    file.Read(&buf,file.GetLength());
    ...
    free(buf);
    这样的操作只是读缓冲区,速度很快。(第一次读时是直接读设备的,以后都是读缓冲区了)
      

  5.   

    用 CreateFile ReadFile CloseFile
    CreateFile中有个FILE_FLAG_NO_BUFFERING参数。
      

  6.   

    HANDLE hfile=CreateFile(FileName,GENERIC_READ   |GENERIC_WRITE,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL | FILE_FLAG_NO_BUFFERING,NULL);
    ReadFile(hfile,ImageData,32*1024,NULL,NULL);
    CloseHandle(hfile);
    在执行ReadFile时就报错了,提示说什么内存不能为写。可我并没有写操作啊。在CreateFile里将GENERIC_WRITE去掉也不行,修改了很多FLAG结果还是会报错。
      

  7.   

    我换一种方法解决了我的问题,现在就是不明白用ReadFile为什么会报错.
    hfile=CreateFile(...,FILE_FLAG_NO_BUFFERING,NULL);
    CFile file(hfile);
    file.Read();
    可以实现刷新。