(求助)C++或MFC中关于转义字符的处理

求助:输入类似于“D:\vc++”报错,不能打开该目录下的文件或文件夹,原因是系统吧\当做转义字符来处理,若改成“D:\\vc++”就可以打开问题是,系统任何地方都将\处... 求助:

输入类似于“D:\vc++”报错,不能打开该目录下的文件或文件夹,原因是系统吧\当做转义字符来处理,若改成“D:\\vc++”就可以打开

问题是,系统任何地方都将\处理为转义字符,没有什么方法或函数可以实现转换,谁有办法处理这个问题?
CFileFind finder;
CUnixTest1App *pApp=(CUnixTest1App *)AfxGetApp();
int flag;
flag=finder.FindFile("YunWeihua\\iverpiao.txt",0);

finder.FindNextFile();

if(flag!=0)
{
pApp->filename="true";
}
else
{
pApp->filename="false";
}
// pApp->filename=finder.GetFileName();
// pApp->filename=finder.GetRoot();
pApp->filename=finder.GetFilePath();
// pApp->filename=finder.GetFileURL();
// CString temproot;
// temproot=finder.GetRoot();
// m_files=temproot;
m_files=pApp->filename;
// CFile::Remove(pApp->filename);
_SHFILEOPSTRUCTA temp;
ZeroMemory(&temp,sizeof(temp));
// temp.hwnd= HWND_DESKTOP;
// temp.fFlags=FOF_NOCONFIRMATION|FOF_SIMPLEPROGRESS;
temp.pFrom=pApp->filename;
temp.wFunc=FO_DELETE;
::SHFileOperation(&temp);

// MessageBox("Deleted!");
UpdateData(false);

App类中:CString filename;

运行后弹出错误:无法读源文件或磁盘!
展开
 我来答
果建翼
推荐于2016-10-07 · TA获得超过7922个赞
知道大有可为答主
回答量:1684
采纳率:0%
帮助的人:2414万
展开全部
不需要转换。你理解错了,不是系统将“\”处理为转义字符,而是编译器把用引号括起来的串里面的\作为转义字符的开始。转义字符是专门给编译器看的。

也就是说只有在代码中写的"C:\\1.txt"这种地方才会有转义字符,真正程序编译完毕之后就不存在转义的问题了。程序编译完毕之后,上面的字符串就变为了C:\1.txt。

比如你在一个文本文件中写了 C:\1.txt,然后你用程序读取这个文件,这里面的\就不会被转义了,因为转义只是在编译这步进行的。

也就是说,转义可以理解为是只在代码中存在的一种特殊写法,好比是程序员给编译器写的暗号,你要在代码中写“\”,就必须写成“\\”,但是实际上的本意还是“\”,字符串“\\\\”的长度是2而不是4(不包括尾部\0的话),因为编译器会把\\认为是一个字符,编译完毕之后\\会变成\。

——————————————————————————————
补充:你那个问题绝对不会是转义字符没有转换造成的,可能是其它原因,多贴点代码出来看看。
——————————————————————————
再补充:pFrom要指向一个双\0结尾的字符串才行。

temp.pFrom=pApp->filename;
这句的前面加上一句:
pApp->filename+='\0';
再试试,应该就没有问题了。
bigshuye
2010-03-13 · TA获得超过2320个赞
知道大有可为答主
回答量:5658
采纳率:0%
帮助的人:4493万
展开全部
这种情况只会在你程序的"xxx"字符串常量里出现,编译的时候处理\

你从text输入,文件里读等都不用管

所以找什么方法或函数没有任何意义
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式