封魔谷老怪在哪:怎么用VC++实现文本的复制粘贴?

来源:百度文库 编辑:查人人中国名人网 时间:2024/05/05 03:38:19
问题:
在一个对话框里点一个按钮,实现把一个文本(.txt文件)中的所有内容复制到另一个文本文件中(不删除原内容,只是在后面增加)。
请问需要哪些函数,具体怎样实现?
本人初学,请详细指教,谢谢!
请问“fread到一个人buffer中”又如何实现?

CFile file1("1.txt",CFile::modeReadWrite);//打开file1
char buf[4080];//缓冲区
memset(buf,0,4080);
file1.Read(buf,file1.GetLength());
CFile file2("2.txt",CFile::modeWrite);
file2.SeekToEnd();//将文件指针移到最后
file2.Write(buf,file1.GetLength());
file1.Close();//关闭文件
file2.Close();
//把1.txt的内容复制到2.txt中去
// 2.txt必须先存在 也可以创建
//CFile file2("2.txt",CFile::modeCreat);

【用VC++实现文本的复制粘贴】
//先有个编辑框控件, 其ID为: IDC_EDIT1
char buf[1024];
GetDlgItem(IDC_EDIT1)->GetWindowText(buf,1024);//取源编辑框文本

CString sFile = "D:\\AA.TXT";//文件名.

CFile f;
CFileFind ff;
//检查文件是否已经存在, 不存在则创建,否则打开
if(!ff.FindFile(sFile, 0))
{
f.Open(sFile.GetBuffer(1),CFile::modeCreate,NULL);
f.Close();
}
f.Open(sFile.GetBuffer(1),CFile::modeReadWrite);

//存入.
f.Write(buf, sizeof(buf));

f.Close();
ff.Close();

【补充问题: 读文件:】
CString sFile = "D:\\AA.TXT";//文件名.

CFile f;
CFileFind ff;
char buf[1024]; //每次读1k字节.具体可以根据需要更改.

if(!ff.FindFile(sFile, 0))//检查文件是否存在.
{
ff.Close();
}
else//文件存在则打开文件并读取
{
f.Open(sFile.GetBuffer(3),CFile::modeReadWrite);
f.Read(buf, sizeof(buf));
f.Close();
ff.Close();
}

注: 没有用fread, 因为CFile在VC里面更适用一些

看你说得应该是文件操作吧。
具体可以用c得fread,fwrite,
第一个文件fopen使用"r"打开,fread到一个人buffer中,第二使用"wa"打开,然后fwrite进去,保证在第二个文件后面追加拷贝得内容。
也可以用cfile或者 cstdiofile等mfc封装得类。

将下面的代码加到button的响应函数中即可
char *pBuffer; // 缓冲
int iFileLen; // 文件长度

// 寻找源文件路径的文件对话框
CFileDialog dlgSrc(TRUE, "source", "*.txt", OFN_HIDEREADONLY, "Text Files (*.txt)|*.txt||", NULL );
// 寻找目标文件路径的对话框
CFileDialog dlgDst(FALSE, "target", "*.txt", OFN_OVERWRITEPROMPT, "Text Files (*.txt)|*.txt||", NULL )

if ( IDOK != dlgSrc.DoModal () )
return;
if ( IDOK != dlgDst.DoModal () )
return;

// 得到源和目标文件的路径和名称
CString strFileSrc = dlgSrc.GetPathName ();
CString strFileDst = dlgDst.GetPathName ();

// 打开源和目标文件
CFile fileSrc, fileDst;
fileSrc.Open ( strFileSrc, CFile::modeRead );
fileDst.Open ( strFileDst, CFile::modeCreate | CFile::modeWrite ) ;

// 得到源文件的长度
iFileLen = (int)fileSrc.GetLength();

// 申请缓冲
pBuffer = new char[iFileLen];

// 将源文件读入到缓冲中
fileSrc.Read ( pBuffer, iFileLen );
// 将缓冲写入到目标文件
fileDst.Write ( pBuffer, iFileLen );
fileSrc.Close ();
fileDst.Close ();

// 清除内存防止内存泄露
delete pBuffer;

不懂啊 CTRL+V不行么