我有一堆使用C风格文件I / O(使用FILE*
流,fprintf
,fscanf
等)的遗留代码,我想要更新操作其他数据源(例如,从网上下载或发布到网上,或从自定义数据传输电缆上下载)。
如果它使用iostreams,这将是一个简单的更新,但它没有。
是否有支持不同类型流的I / O的C或C ++库,但它们与源代码兼容,或者与C的FILE*
流函数大部分源兼容?
如果源代码兼容性太大而无法提问,我会满足于“能够使用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
语义的复杂性(因为我有需要更新的许多fscanf
和fprintf
次调用)。这样的东西可以工作,除了我找不到像istream_scanf
这样的东西:
std::istream *input = make_http_istream(url);
istream_scanf(*input, &f_id, &f_units, &h_index, &h_default);
delete input;