我想要对一个已存在的文件进行读写,首先读整个文件,将数据保存到内存后对它进行处理,将处理后的数据在从新写入到这个文件中。
我想应该用API: CreateFile,以GENERIC_READ | GENERIC_WRITE 模式打开。
但是问题在于当我用ReadFile读完数据到pBuffer并修改它后,在用WriteFile将pBuffer写入这个文件,会在原来的数据前插入这段修改了的数据。而我的目的自然是希望用这段修改好的数据覆盖原来的数据。
想请问一下,有什么API,能够帮助我在写入数据前,对这个文件进行清空?
或者还有别的什么解决方案。

解决方案 »

  1.   

    写入前,重新调用 CreateFile,dwCreationDisposition 设为 CREATE_ALWAYS其实就是新建个空文件把原来的覆盖了
      

  2.   

    最好是打开、读取、关闭,写的时候重新打开、写入、关闭。如果你硬要用同一个文件句柄,那么也可以用SetFilePointer设置文件指针到文件的头部,但是如果你后面写入的数据比原来少,就会存在问题,多出来一些原来的数据。
      

  3.   

    我按照覆盖的办法,在测试文件里成功了。
    但是又来了个问题:
    我的测试文件是test.txt,而我的目标文件是一个.ini文件.
    请问各位,是否CreateFile文件只能以读的方式打开.ini文件(我可以在第一次打开.ini文件后读出数据),
    而CREATE_ALWAYS就会返回FILE_ATTRIBUTE_ARCHIVE (第二次打不开)?还有,这个情况下是否一定要使用.ini文件读写的API 
    如:GetPrivateProfileString WritePrivateProfileString ?
      

  4.   

    CreateFile和文件后缀没有关系,是你的使用问题。
    当然可以用自己的方法来读写ini文件,只要按照规定的格式,就可以和GetPrivateProfileString/WritePrivateProfileString兼容。