刚才回答xddll“小问题,有分送!!!“的几位老兄都来看一看啊!nononono、sxbyl...

时间:2022-02-10 14:17:26
小弟特地试验了一下,发现了完全不同的结果:
1、CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("dbf文件(*.dbf)|*.dbf|所有文件(*.*)|*.*||"),this);
if(dlg.DoModal()==IDOK)
{
m_path=dlg.GetPathName();
UpdateData(FALSE);
}
CString temp;
CString winpath("");
for(int i=0;i<m_path.GetLength();i++)
{
temp=m_path.Mid(i,1);
if(temp=="\\")
temp="\\\\";
winpath+=temp;
}

CFile file;
char buf[30];
if(file.Open(winpath,CFile::modeRead))
{
file.Read(buf,20);
}

2、 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
_T("dbf文件(*.dbf)|*.dbf|所有文件(*.*)|*.*||"),this);
if(dlg.DoModal()==IDOK)
{
m_path=dlg.GetPathName();
UpdateData(FALSE);
}

CFile file;
char buf[30];
if(file.Open(m_path,CFile::modeRead))
{
file.Read(buf,20);
}
小弟发现这两种情况下都是成功的,请大家讨论一下为什么?

5 个解决方案

#1


上个问题你没有给winpath付初值

#2


CString 无需付初值,初始值为空字符串

#3


如果是取得的字符串的话,
好像'\\'和'\'都是对的,
这倒不知为什么?

#4


也许是这样的
刚才你的问题中:a是
CString a="c:\windows\system";
你后边的程序中想把\换成\其实这个时候a中就没有字符 \ 的
所以错误

#5


wistaria说的对。

你试验这2段程序的时候(尤其是第1部分),没有指定另外一个目录吧?如果仅是当前目录,程序段

for(int i=0;i<m_path.GetLength();i++)
{
    temp=m_path.Mid(i,1);
    if(temp=="\\")
        temp="\\\\";
    winpath+=temp;
}

就没有作用,winpath还是空串。

你再试试。

#1


上个问题你没有给winpath付初值

#2


CString 无需付初值,初始值为空字符串

#3


如果是取得的字符串的话,
好像'\\'和'\'都是对的,
这倒不知为什么?

#4


也许是这样的
刚才你的问题中:a是
CString a="c:\windows\system";
你后边的程序中想把\换成\其实这个时候a中就没有字符 \ 的
所以错误

#5


wistaria说的对。

你试验这2段程序的时候(尤其是第1部分),没有指定另外一个目录吧?如果仅是当前目录,程序段

for(int i=0;i<m_path.GetLength();i++)
{
    temp=m_path.Mid(i,1);
    if(temp=="\\")
        temp="\\\\";
    winpath+=temp;
}

就没有作用,winpath还是空串。

你再试试。