Chinaunix首页 | 论坛 | 博客
  • 博客访问: 627697
  • 博文数量: 603
  • 博客积分: 4000
  • 博客等级: 上校
  • 技术积分: 4940
  • 用 户 组: 普通用户
  • 注册时间: 2008-09-17 11:04
文章分类

全部博文(603)

文章存档

2011年(1)

2008年(602)

我的朋友

分类:

2008-09-17 11:18:47


()
- ()
-- ()


由 youlitai 在 2008-06-09 12:59 发表:

文件复制的问题

在vs2005 mfc 下
我想利用Ondakai函数,实现选一个文本文件,然后把它复制到指定的目录c:\\TextRO下
void ClujingView::Ondakai()
{
CFileDialog myDlg(TRUE, NULL, NULL, 0, _T("txt ¦*.txt ¦ ¦"));
myDlg.DoModal();

CString filenamecs = myDlg.GetFileName();
TCHAR* filename = new TCHAR[100];
filename=filenamecs.GetBuffer(filenamecs.GetLength());



TCHAR szNewPath[MAX_PATH];
TCHAR szDirPath[] = TEXT("c:\\TextRO\\");
CreateDirectory(szDirPath, NULL);
lstrcpy(szNewPath,szDirPath);
lstrcat(szNewPath,filename);


DWORD dwAttrs;
CopyFile(filename,szNewPath,FALSE);
dwAttrs = GetFileAttributes(filename);
SetFileAttributes(szNewPath, dwAttrs ¦ FILE_ATTRIBUTE_READONLY);

filenamecs.ReleaseBuffer();
delete []filename; // 调试时这里出现堆内存错误。
filename= NULL;

}
帮忙看看。哪里不对,现在能建c:\\TextRO目录,但就是复制不了文件


由 smilebit 在 2008-06-09 15:19 发表:

这样写就可以了.
void ClujingView::Ondakai()
{
CFileDialog dlg(true,_T("*.txt"),NULL,4|2,_T("文本(*.txt)|*.txt||"));
dlg.m_ofn.lpstrTitle=_T("选择文件");
if(dlg.DoModal()==IDOK)
{
CString m_strFilePath=dlg.GetPathName();
CString m_strFileName=dlg.GetFileName();
CString m_strDesFilePath(_T("C:\\"+m_strFileName));
if(::CopyFile(m_strFilePath,m_strDesFilePath,false))
::MessageBox(NULL,_T("复制成功!"),_T("复制文件"),MB_OK);
}
}

你的程序当中
TCHAR* filename = new TCHAR[100]; //这个在堆上分配
filename=filenamecs.GetBuffer(filenamecs.GetLength()); //这句的返回值又指向了filenamecs中的数据,在后面你又有delete []filename,这样你删的就是filenamecs,但CString filenamecs = myDlg.GetFileName(); 分配在栈上,通常分配在栈上的变量,当作用域超过它的范围时,会自动删除.也就不是你想删的TCHAR* filename = new TCHAR[100]; 的数据域.所以出现堆错误.

__________________
为祖国荣誉而战


全部时间均为北京时间. 现在时间是17:04 .

Powered by: vBulletin Version 2.2.8
Translated and hacked by:
Copyright © Jelsoft Enterprises Limited 2000, 2001.


--------------------next---------------------

阅读(283) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~