1》CFileDialog可以不改变路径: fd.m_ofn.Flags|=OFN_NOCHANGEDIR;//keep same dir 2》你可以设置初始路径: if(strlen(m_KeptPath)==0) fd.m_ofn.lpstrInitialDir="D:\\"; else fd.m_ofn.lpstrInitialDir=m_KeptPath; 3》如果是多选: if (fd.DoModal()==IDOK) {// invalid file name will be prompted. // file existence will be checked // may be multi selection under one same directory POSITION pos=fd.GetStartPosition( ); while (pos) { cstrArr.Add(fd.GetNextPathName(pos)); } 4》把上面取来的路径(包括名)作为源文件名,目的文件名是源文件路径去除实际路径(即只要名)加上目的路径
-------------
本来就没一起使用啊,DOMODAL返回了对话框就就结束了
lpsh.pTo = "res\\"; ==》更改成lpsh.pTo = "res\\Test.txt";
void CReadTEXTDlg::Open()
{
char strtemp[100000];
CFile m_file;
CString str;
SHFILEOPSTRUCT m_shfile;
CFileDialog m_fileDlg(true,"","penghao",OFN_HIDEREADONLY,
"Text Files (*.txt)|*.txt|cpp Files (*.cpp)|*.cpp||");
if (m_fileDlg.DoModal()==IDOK)
{
CString strtemp1;
str=m_fileDlg.GetPathName(); ZeroMemory(&m_shfile,sizeof(m_shfile));
m_shfile.hwnd =HWND_DESKTOP;
m_shfile.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS;
m_shfile.wFunc=FO_COPY;
m_shfile.pFrom="C:\\AA.txt";
m_shfile.pTo = "story\\";
if(SHFileOperation(&m_shfile)==0)
{
AfxMessageBox("成功!"); }
}
//
if (m_file.Open(str,CFile::modeRead))
{
str=m_fileDlg.GetFileTitle(); int a=m_file.Read(strtemp,100000);
strtemp[a-1]='\0';
SetDlgItemText(IDC_EDIT1,strtemp);
m_listBox.AddString(str);
if (m_listBox.GetCount()!=0)
{
hwnd=GetDlgItem(IDC_BUTTON1);
hwnd->EnableWindow(true);
hwnd=GetDlgItem(IDC_BUTTON2);
hwnd->EnableWindow(true);
} }else
{
AfxMessageBox("你要打开的文件不存在,请检查!");
}
}
运行的时候报错 无法复制AA:文件名、目录名或卷标不正确。但是我把if (m_fileDlg.DoModal()==IDOK)注释掉就好了,不知道是什么原因有人说是当前目录不对,但是在m_fileDlg.DoModal()之后怎么把当前目录设置成工程目录了。
{
SHFILEOPSTRUCT lpsh; ZeroMemory(&lpsh,sizeof(lpsh));
lpsh.hwnd= HWND_DESKTOP; lpsh.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS ;
lpsh.wFunc=FO_COPY; // FO_MOVE 则是移动
lpsh.pFrom= "C:\\Test.txt";
lpsh.pTo = "res\\";
if( 0 != SHFileOperation(&lpsh))
{
AfxMessageBox("复制文件出错,请检查"); return ;
}
}
========
看得我头都晕了,你的CFileDialog好像没有发挥什么作用啊?你的源文件和目标文件都是定死了的:
lpsh.pFrom= "C:\\Test.txt";
lpsh.pTo = "res\\";
用不用CFileDialog都没关系啊
另外出错的原因就在CFileDialog上。你的目标路径是:lpsh.pTo = "res\\"; 这里用的是相对路径,是相对于你的当前工作目录而言的,本来当前工作目录,你在VS中执行的话,就是工程目录,但是用了CFileDialog之后,如果选了一个文件,此时当前工作目录就成了你所选文件所在的目录了,打个比方,你在CFileDialog弹出的对话框中选了C:\\1.txt,然后按确定之后,此时当前工作目录就成了C:\了。
========
你弹出CFileDialog有什么用呢?你上面都没有用它。
=======
上面已经说了,用GetCurrentDirectory 保存当前工作目录,在DoModal之后用 SetCurrentDirectory恢复就行了。
fd.m_ofn.Flags|=OFN_NOCHANGEDIR;//keep same dir
2》你可以设置初始路径:
if(strlen(m_KeptPath)==0) fd.m_ofn.lpstrInitialDir="D:\\";
else fd.m_ofn.lpstrInitialDir=m_KeptPath;
3》如果是多选:
if (fd.DoModal()==IDOK)
{// invalid file name will be prompted.
// file existence will be checked
// may be multi selection under one same directory
POSITION pos=fd.GetStartPosition( );
while (pos)
{
cstrArr.Add(fd.GetNextPathName(pos));
}
4》把上面取来的路径(包括名)作为源文件名,目的文件名是源文件路径去除实际路径(即只要名)加上目的路径
原文是这样的
为了节省篇幅,在工程InsertData(例2)的基础上来创建这样的MFC程序。方法是:将InsertData目录复制一份,并将复制后的目录名改为InsertData2,然后双击此目录下的InertData.dsw文件,打开文件InsertData。按照下列步骤进行补充: