我有一个函数,它从命令行读取文件名,然后尝试打开文件并解析它。但是,fopen
总是返回 null,错误代码为 2、3 或 123,具体取决于给定的文件名。
原来的非工作代码是:
void CProfiler::ExecuteIrFile( LPCTSTR pszFile)
{
FILE *fp = fopen( pszFile, "r");
if ( !fp) return;
}
更改为 fopen( "c:\\temp\\file.txt", "r")
确实有效。
所以我被引导相信它是在我传递给 fopen
将字符串中的 \
替换为 \\
也不起作用。为了更好地衡量,我用来执行此操作的代码是:
CString tempStr(pszFile);
tempStr.Replace("\\", "\\\\");
FILE *fp = fopen( tempStr, "r");
它们是一种为 fopen 正确转义字符串的方法,还是我遗漏的其他方法? 简单的答案将很受欢迎,因为我过去根本没有使用过 C++。
已解决
我在传递的字符串中有一个前导空格,调试器打开时屏幕上的分辨率太低,因此在我尝试将字符串作为二进制文件打印到文件之前没有注意到这个空格。 感谢大家的帮助
最佳答案
您还可以在 Windows 文件名中使用 /
- 这更容易,因为您可以替换单个字符而无需更改字符串长度。
例如。 "c:/temp/file.txt"
而不是 "c:\\temp\\file.txt"
关于c++ - 为 fopen 格式化文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430442/