我有一堆使用 C 样式文件 I/O(使用FILE*
流、、、fprintf
等fscanf
)的遗留代码,我想更新这些代码以操作其他数据源(例如,从网络下载或发布到网络,或来自或来自自定义数据传输电缆)。
如果它使用 iostreams,这将是一个简单的更新,但事实并非如此。
FILE*
是否有任何用于 I/O 的 C 或 C++ 库支持不同类型的流但与 C 的流函数源兼容或大部分源兼容?
如果源兼容性要求太高,我会选择“能够用 Perl 脚本进行搜索和替换”。 fprintf
并且fscanf
似乎是这里的主要障碍;我还没有找到iostream
这些的任何兼容版本。
我正在寻找一种适用于 Windows 和 Linux 的解决方案。
例子
作为一个简单的例子,我有如下代码:
FILE *input = fopen(filename, "rt");
fscanf(input, "%d,%d,%d,%f", &f_id, &f_units, &h_index, &h_default);
fclose(input);
我想更新它以处理格式相同但可能来自其他来源的数据,而不必担心自己如何准确复制fscanf
's 语义的复杂性(因为我有很多很多需要的fscanf
调用fprintf
更新)。像这样的东西会起作用,除了我找不到类似的东西istream_scanf
:
std::istream *input = make_http_istream(url);
istream_scanf(*input, &f_id, &f_units, &h_index, &h_default);
delete input;