【问题标题】:C++ Writing to file with an unwanted null character inside the pathnameC++ 在路径名中使用不需要的空字符写入文件
【发布时间】:2020-10-15 14:12:02
【问题描述】:

我陷入了这个奇异的问题: 我必须在 "C:....\0-myfolder\subfolder\file.txt" 之类的路径上写入 txt 文件, 其中 '0-myfolder' 是文件夹的全名

将其写为带有双反斜杠的普通路径不起作用,因为在序列中读取了不需要的空字符。我尝试写入同一目录中的另一个文件夹,该文件夹的名称不以 0 开头,并且它可以正常工作,并且由于其他原因我无法重命名该文件夹。

有没有办法强制 c++ 不读取空字符?

【问题讨论】:

  • 你试过正斜杠 / 吗? C:..../0-myfolder/subfolder/file.txt
  • 转义 \ 字符,将所有 \ 替换为 \\
  • 如果使用双反斜杠不起作用,则说明其他问题。请注意,您需要转义所有反斜杠,而不仅仅是0之前的反斜杠。跨度>
  • 是的,我正确地使用了双反斜杠而不是单反斜杠,正如我所说,我还尝试从 0-myfolder 同一目录中的另一个文件夹中读取它并且它可以工作..即使使用正斜杠正如@Tony 所建议的那样,它没有用。我还让它写出了我插入的文件的文件名,它是正确的,我可以将它复制并粘贴到资源管理器上并打开文件。
  • 那么还有其他问题。你能从你的程序中读取它吗?您是否确认您对该文件具有写入权限,并且没有在其他地方打开它?考虑创建一个minimal reproducible example

标签: c++ filepath null-character


【解决方案1】:

使用原始字符串文字可能是一个很好的解决方案:

#include <iostream>

int main(void)
{
   std::cout << R"(C:\0-myfolder\subfolder\file.txt)" << std::endl;
   return 0;
}

句柄自动转义产生干净的输出 C:\0-myfolder\subfolder\file.txt

https://en.cppreference.com/w/cpp/language/string_literal

【讨论】:

  • 字符串现在正确出来了,谢谢!!无论如何它没有找到文件,字符串仍然是正确的..我要做一些测试
猜你喜欢
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 1970-01-01
  • 2011-11-09
  • 1970-01-01
  • 2015-03-26
相关资源
最近更新 更多