用C ++创建一个不可见的文本文件

时间:2016-07-17 07:26:27

标签: c++ text-files fstream fltk

简单地说,我有一个浏览器小部件我在FLTK Gui工具包中使用,可以使用这样的文件加载。

browser::load("textfile.txt");

问题是我不想创建一个物理文本文件,只是一个不可见的文件,所以我可以将它用作上面的browser :: load的参数。我计划使用这个不可见的文本文件加载我将要放在浏览器中的值....然后像这样使用它。

browser::load("invisible_textfile.txt");

是否可以在C ++中执行此操作?

我已经尝试使用ifstream::rdbuf(),这可能与此无关。我甚至不确定该怎么称呼所以我现在只是把它称为隐形文本文件。

我正在使用Windows 7 64位。 MinGW编译器。

2 个答案:

答案 0 :(得分:1)

这很大程度上取决于browser::load()内部实际执行的操作,但我们假设它将查找您的文件名并加载它。

您可能已经知道如何读取/写入标准文件(例如http://www.cplusplus.com/doc/tutorial/files/)。现在,如果您只想隐藏用户的文件,可以设置操作系统特定的隐藏标志(例如windows)。我假设这不是你真正想要在这里完成的。 (你显然也可以创建一个你再次删除的临时文件,但它也不是一个优雅的解决方案。)

您可能想要使用的是命名管道。在Linux下,您可以使用mkfifo创建这些管道,然后通过这些文件对象传输内容。

但一般的观点是,除非browser API允许您传递包含文本文件或stringstream的完整字符串,否则您将需要一个文件对象。

如果您的唯一目标系统是NTFS,那么在此处创建虚拟文件有一个很好的答案: How to create a virtual file?

但最后,您可能想要创建一个实际文件(在您的情况下可能是临时文件)。我建议将该文件放入系统临时路径。

答案 1 :(得分:1)

让我们说你要添加的内容相当于这样的文本文件:

One
Two
Three

但是你不想拥有文本文件。因此,一段代码可以做同样的事情:

const char *lines[] = { "One", "Two", "Three", 0 };
for(int i = 0 ; lines[i] != 0 ; ++i)
    browser.add(lines[i]);

Documentation link for that overload of add

如果您需要有关如何获取lines数据的更多帮助,请优化您的问题,或者提出新问题。