基于ATL对话框中打开目录选择文件,如何得到这样路径D:\\C++\\SignAddin\\file.doc??

时间:2021-10-23 12:27:46
基于ATL对话框中打开目录选择文件,如何得到这样路径D:\\C++\\SignAddin\\file.doc??
我用OPENFILENAME函数建立打开目录对话框,但是lpstrFile 只能返回这种形式目录及文件名,如:“D:\C++\SignAddin\file.doc”。 
如果我现在想得到“D:\\C++\\SignAddin\\file.doc”,应该怎么做?
 D:\C++\SignAddin\file.doc与D:\\C++\\SignAddin\\file.doc有什么不同,为什么我程序中只能用"\\",用“\”就出错??

6 个解决方案

#1


在c语言中字符串里单斜杠在代码里是转义字符的前缀。写代码需要用 \\ 代表一个字符 \ ,你所得到的 "D:\C++\SignAddin\file.doc" 是实际的字符信息,是正确的不用再变成"D:\\C++\\SignAddin\\file.doc" ,如果真的需要变成这样,可以用 CString 的 replace 函数。不过我建议楼主搞清楚 c/c++ 的转义字符再说吧

#2


char const* zInputFile ="D:\\C++\\RSA\\file.doc";
string sData;
FileSource(zInputFile, true, new StringSink(sData));
byte abDigest[SHA::DIGESTSIZE];
SHA sha;
StringSource(sData, true,new HashFilter(sha,new ArraySink(abDigest, sizeof(abDigest))));
可是这个实现的计算Hsah值的函数用"D:\C++\RSA\file.doc"就不行。

#3


  顶楼主一下

#4


自己用\\ 来替代 \ 字符
在代码中 \\需要先加一个 \ 来表示这是一个转义字符,这样后面那个 \ 就能表示对应的 符号,不然 会被转义

#5


引用 2 楼 shaotian826 的回复:
char const* zInputFile ="D:\\C++\\RSA\\file.doc"; 
string sData; 
FileSource(zInputFile, true, new StringSink(sData)); 
byte abDigest[SHA::DIGESTSIZE]; 
SHA sha; 
StringSource(sData, true,new HashFilter(sha,new ArraySink(abDigest, sizeof(abDigest)))); 
可是这个实现的计算Hsah值的函数用"D:\C++\RSA\file.doc"就不行。 


楼主还是没有明白转义。在代码中书写字符串常量,双斜杠表示一个斜杠,比如这句:
char const* zInputFile ="D:\\C++\\RSA\\file.doc";
其实zInputFile指向的字符串是"D:\C++\RSA\file.doc"。
所以在字符串常量中需要双斜杠,但是如果一个字符串已经指向"D:\C++\RSA\file.doc"了,就不需要把单斜杠转换为双斜杠了。转换之后反而不是有效路径了。

#6


Replace 替换一下就可以了。
转义用的。

#1


在c语言中字符串里单斜杠在代码里是转义字符的前缀。写代码需要用 \\ 代表一个字符 \ ,你所得到的 "D:\C++\SignAddin\file.doc" 是实际的字符信息,是正确的不用再变成"D:\\C++\\SignAddin\\file.doc" ,如果真的需要变成这样,可以用 CString 的 replace 函数。不过我建议楼主搞清楚 c/c++ 的转义字符再说吧

#2


char const* zInputFile ="D:\\C++\\RSA\\file.doc";
string sData;
FileSource(zInputFile, true, new StringSink(sData));
byte abDigest[SHA::DIGESTSIZE];
SHA sha;
StringSource(sData, true,new HashFilter(sha,new ArraySink(abDigest, sizeof(abDigest))));
可是这个实现的计算Hsah值的函数用"D:\C++\RSA\file.doc"就不行。

#3


  顶楼主一下

#4


自己用\\ 来替代 \ 字符
在代码中 \\需要先加一个 \ 来表示这是一个转义字符,这样后面那个 \ 就能表示对应的 符号,不然 会被转义

#5


引用 2 楼 shaotian826 的回复:
char const* zInputFile ="D:\\C++\\RSA\\file.doc"; 
string sData; 
FileSource(zInputFile, true, new StringSink(sData)); 
byte abDigest[SHA::DIGESTSIZE]; 
SHA sha; 
StringSource(sData, true,new HashFilter(sha,new ArraySink(abDigest, sizeof(abDigest)))); 
可是这个实现的计算Hsah值的函数用"D:\C++\RSA\file.doc"就不行。 


楼主还是没有明白转义。在代码中书写字符串常量,双斜杠表示一个斜杠,比如这句:
char const* zInputFile ="D:\\C++\\RSA\\file.doc";
其实zInputFile指向的字符串是"D:\C++\RSA\file.doc"。
所以在字符串常量中需要双斜杠,但是如果一个字符串已经指向"D:\C++\RSA\file.doc"了,就不需要把单斜杠转换为双斜杠了。转换之后反而不是有效路径了。

#6


Replace 替换一下就可以了。
转义用的。