首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++文件写入有关问题求教

2012-03-07 
C++文件写入问题求教我想用writefile函数把从一个文件读到的数据写入另一个文件去,但测试下来失败,自己没

C++文件写入问题求教
我想用writefile函数把从一个文件读到的数据写入另一个文件去,但测试下来失败,自己没看出什么问题,求教大神们~
以下是我的代码:

#include <iostream>
#include <windows.h>
using namespace std;
#define buffer_size 1024

void main(){
HANDLE handle_src,handle_dst;
char *buffer;
DWORD NumberOfBytesRead,NumberOfBytesWrite;
int Flag1,Flag2;

handle_src=CreateFile("1.txt",GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,NULL);
handle_dst=CreateFile("2.txt",GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_FLAG_NO_BUFFERING,NULL);
if(handle_src==INVALID_HANDLE_VALUE)
{
cout<<"文件打开失败";
}

buffer = new char[buffer_size];
Flag1=ReadFile(handle_src,buffer,buffer_size,&NumberOfBytesRead,NULL);
Flag2=WriteFile(handle_dst,buffer,NumberOfBytesRead,&NumberOfBytesWrite,NULL);

CloseHandle(handle_src);
}

调试了下,发现FLAG2一直是0,不知道错在哪里了

[解决办法]
1:访问文件时,使用的偏移量=磁盘卷的扇区大小的整数倍;磁盘卷的扇区大小可以通过GetDiskFreeSpace()获得

2:读取写入的字节数=扇区大小的整数倍

3:缓存在进程地址空间的起始地址=扇区大小的整数倍


FILE_FLAG_NO_BUFFERING标志要求这些...
[解决办法]
handle_dst=CreateFile("2.txt",GENERIC_READ|GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_FLAG_BACKUP_SEMANTICS,NULL);

[解决办法]
1:访问文件时,使用的偏移量=磁盘卷的扇区大小的整数倍;磁盘卷的扇区大小可以通过GetDiskFreeSpace()获得

2:读取写入的字节数=扇区大小的整数倍

3:缓存在进程地址空间的起始地址=扇区大小的整数倍

FILE_FLAG_NO_BUFFERING标志要求这些 

特么的 我的回复不见了...
[解决办法]
CreateFile,WriteFile是MFC的方法
可以用C++方法来实现,如下:
#include <iostream>
#include <fstream> // 引入文件流
#include <string> // 引入标准库string类

int main()
{
std::string str;// 定义一个string类型变量用来存放读取的1.txt文件内容
std::ifstream infile( "1.txt ",std::ios::in);// 建立一个文件输入流
std::getline(infile,str, '\0 ');// getline函数默认读取一行数据,这里将第三个参数设为 '\0 ',可以
// 读取全部文件内容
infile.close(); // 读取后将文件关闭
std::ofstream outfile( "2.txt ",std::ios::out);// 建立一个文件输出流
outfile < <str; // 将str中存放的读取1.txt的内容写入到文件2.txt中
outfile.close(); // 写入后关闭文件
return 0;
}

热点排行