(求助)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;
运行后弹出错误:无法读源文件或磁盘! 展开
输入类似于“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;
运行后弹出错误:无法读源文件或磁盘! 展开
2个回答
展开全部
不需要转换。你理解错了,不是系统将“\”处理为转义字符,而是编译器把用引号括起来的串里面的\作为转义字符的开始。转义字符是专门给编译器看的。
也就是说只有在代码中写的"C:\\1.txt"这种地方才会有转义字符,真正程序编译完毕之后就不存在转义的问题了。程序编译完毕之后,上面的字符串就变为了C:\1.txt。
比如你在一个文本文件中写了 C:\1.txt,然后你用程序读取这个文件,这里面的\就不会被转义了,因为转义只是在编译这步进行的。
也就是说,转义可以理解为是只在代码中存在的一种特殊写法,好比是程序员给编译器写的暗号,你要在代码中写“\”,就必须写成“\\”,但是实际上的本意还是“\”,字符串“\\\\”的长度是2而不是4(不包括尾部\0的话),因为编译器会把\\认为是一个字符,编译完毕之后\\会变成\。
——————————————————————————————
补充:你那个问题绝对不会是转义字符没有转换造成的,可能是其它原因,多贴点代码出来看看。
——————————————————————————
再补充:pFrom要指向一个双\0结尾的字符串才行。
在
temp.pFrom=pApp->filename;
这句的前面加上一句:
pApp->filename+='\0';
再试试,应该就没有问题了。
也就是说只有在代码中写的"C:\\1.txt"这种地方才会有转义字符,真正程序编译完毕之后就不存在转义的问题了。程序编译完毕之后,上面的字符串就变为了C:\1.txt。
比如你在一个文本文件中写了 C:\1.txt,然后你用程序读取这个文件,这里面的\就不会被转义了,因为转义只是在编译这步进行的。
也就是说,转义可以理解为是只在代码中存在的一种特殊写法,好比是程序员给编译器写的暗号,你要在代码中写“\”,就必须写成“\\”,但是实际上的本意还是“\”,字符串“\\\\”的长度是2而不是4(不包括尾部\0的话),因为编译器会把\\认为是一个字符,编译完毕之后\\会变成\。
——————————————————————————————
补充:你那个问题绝对不会是转义字符没有转换造成的,可能是其它原因,多贴点代码出来看看。
——————————————————————————
再补充:pFrom要指向一个双\0结尾的字符串才行。
在
temp.pFrom=pApp->filename;
这句的前面加上一句:
pApp->filename+='\0';
再试试,应该就没有问题了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询