char* filename="file_test.txt";
CreateFile(filename,GENERIC_WRITE|GENERIC_READ,0,NULL,
CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
char buffer[]="abcdefghijklmnopqrstuvwsyz1234567890";
WriteFile(filename,buffer,0,NULL,NULL);
BOOL WriteFile(
  HANDLE hFile,                    // handle to file
  LPCVOID lpBuffer,                // data buffer
  DWORD nNumberOfBytesToWrite,     // number of bytes to write
  LPDWORD lpNumberOfBytesWritten,  // number of bytes written
  LPOVERLAPPED lpOverlapped        // overlapped buffer
);
查了MSDN,在W2000底下3,4参数不能同时为0,NULL。
但是4参数到底代表什么东西,应该怎么设置它??????谢谢!

解决方案 »

  1.   

    三是要写的字节数,四是写入的字节数。最好给四定义一个DWORD类型传进去。三直接写要写的字节数即可。DWORD dwWritten;
    WriteFile(filename,buffer,strlen(buffer),&dwWritten,NULL);
      

  2.   

    表示实际写入的字节数,传入DWORD类型的指针
      

  3.   

    是一个DWORD类型变量的地址, 这个函数运行成功与否是依靠返回的BOOL数值来决定的,但是有可能在运行失败的时候,已经向文件当中写入了部分内容,例如写入一半的时候磁盘空间满了,那么函数会返回错误,但是实际已经写入了数据,这个实际写入的数据的量就是由系统设置到这个地址指定的DWORD类型的变量当中了。
    正如MSDN所说,在覆盖模式下,这个信息是放置在覆盖结构当中的,无需指定。
      

  4.   

    dwWritten需要付出始值吗?不清楚它有用没用?
    我按照上面的改过之后还是不能写进去。我在对话框中定义两个按钮,一个creat file,一个write file。在dlg类中
    定仪了一个pulic变量 char* filename;void CFile1Dlg::OnCreate() 
    {
    // TODO: Add your control notification handler code here
    filename="file_test.txt";
    CreateFile(filename,GENERIC_WRITE|GENERIC_READ,0,NULL,
    CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0);
    printf(filename);
    }void CFile1Dlg::OnWrite() 
    {
    // TODO: Add your control notification handler code here
    char* buffer="abcdefghijklmnopqrstuvwsyz1234567890";
    DWORD dwWritten;
    if (WriteFile(filename,buffer,strlen(buffer),&dwWritten,NULL))
    {
    AfxMessageBox("write successfully");
    }
    else
    {
    AfxMessageBox("fail to write in");
    }
    }
      

  5.   

    上面诸位已经讲得很清楚了,再通俗一点。参数3用于分配内存,将字符串写入文件时需要缓冲,这个缓冲长度需要事前设定,应该大于strlen(buffer),至少是strlen(buffer)+1。参数4可设为NULL,除非你需要了解自己写了多少字符时,才设置此值。
      

  6.   

    补充一点,楼主的修改中,需将strlen(buffer)改为strlen(buffer)+1。第四个参数不必初始化,因为它在WriteFile中的作用是输出而不是输入。
      

  7.   

    原来是writefile句柄搞错了。谢谢大家!!!
    接分!!!