【发布时间】:2009-02-21 10:14:43
【问题描述】:
C++ 是否可以通过文件句柄访问 infile 数据?例如 Perl 中的典型习语是:
while (<DATA>) {
chomp;
# do sth with $_
}
__DATA__
Foo
Bar
在 C++ 中有什么方法可以做到这一点?
【问题讨论】:
标签: c++ filehandle
C++ 是否可以通过文件句柄访问 infile 数据?例如 Perl 中的典型习语是:
while (<DATA>) {
chomp;
# do sth with $_
}
__DATA__
Foo
Bar
在 C++ 中有什么方法可以做到这一点?
【问题讨论】:
标签: c++ filehandle
您的意思是在程序中包含文件?
不,C++ 做不到。与 Perl 不同。有许多工具可以将二进制或文本文件打包为 C/C++ 源代码。它们最终只是作为一个全局数组。
我一直觉得有用的一件事是能够将随机内存作为文件句柄打开,这与您似乎在询问的内容相似。在标准 C++ 中,这可以通过 istringstream 类来完成,它与 ifstream 具有相同的接口。
但您问题的上下文可能暗示有更好的方法来完成您在 C/C++ 中的想法。需要更多信息。
【讨论】:
我不会说它是惯用的,因为我从未在任何 C++ 代码中见过它,但您可以使用 C++ 字符串流和 C 预处理器字符串粘贴来将多行字符串视为输入流:
#include <sstream>
#include <iostream>
using namespace std;
const string data =
"once upon a time, " \
"a young lass called Goldilocks\n" \
"went for a walk in the forest.\n";
int main ()
{
istringstream in (data);
for (string line; getline(in, line); )
cout << line << endl;
return 0;
}
【讨论】:
C++ 没有惯用的方法来做到这一点。请改用单独的数据文件。
根据您的平台,您可能希望使用资源来实现类似的结果,但这超出了 C++ 的范围。特别是,要将资源存储在二进制文件中,您需要使用外部工具并在代码中读取这些资源,您需要调用平台 API。例如在 Windows 下,有 LoadResource 函数(和相关的)。
【讨论】: