【问题标题】:C++: Read files that dont have an extensionC++:读取没有扩展名的文件
【发布时间】:2016-03-24 04:31:55
【问题描述】:

我有一些“文件”类型的文件 我的意思不是“Resource\sample.txt”,而是他们的名字是“Resource\sample” 现在我想用 c++ 读取它们并将它们存储在一个字符串中。 这是我的代码:

std::stringstream textBuffer;
std::fstream fileHandle;
std::string content
fileHandle.open("Resource\sample", std::ios::in);
textBuffer << fileHandle.rdbuf();
content = textBuffer.str();
fileHandle.close();

但是当我编译这个时,“content”变量的值等于“”。 帮我解决这个问题。提前致谢。 请注意,唯一的问题是该文件没有任何扩展名,例如 .txt 或 .dat 或 .bin。

【问题讨论】:

  • 文件名无所谓,在别处寻找错误。
  • 如果文件具有“.txt”扩展名,程序可以正常工作
  • 打开后检查文件流:if (!fileHandle) { std::cerr "Failed to open\n"; return 1; } - 不能解决问题,但可以解决问题。

标签: c++ file fstream ostream istream


【解决方案1】:

您没有正确转义文件名字符串中的反斜杠。您需要转义字符串:

fileHandle.open("Resource\\sample", std::ios::in);

或使用原始字符串文字:

fileHandle.open(R"(Resource\sample)", std::ios::in);

【讨论】:

  • 因为如果将地址更改为“Resource\sample.txt”并将“.txt”扩展名添加到文件中,一切正常。
  • 反斜杠是一个转义字符,参见stackoverflow.com/questions/10220401/…。反斜杠意味着编译器不会将反斜杠放入字符串中,而是将取决于反斜杠后面的字符的字符。一个常见的转义序列是 '\n' 换行符。 "\s" 将被缩减为 "s"。您可以在调试器中或使用 printf 进行检查。
  • 我唯一的解释为什么它在添加“.txt”时成功:你有一个程序写了这个文件。您犯了同样的错误,并且光盘上的文件不是“Resource\sample.txt”而是“Resourcesample.txt”(在光盘上您有“Resource\sample”但没有“Resourcesample”)!?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-24
  • 1970-01-01
相关资源
最近更新 更多