简单地说,我有一个浏览器小部件我在FLTK Gui工具包中使用,可以使用这样的文件加载。
browser::load("textfile.txt");
问题是我不想创建一个物理文本文件,只是一个不可见的文件,所以我可以将它用作上面的browser :: load的参数。我计划使用这个不可见的文本文件加载我将要放在浏览器中的值....然后像这样使用它。
browser::load("invisible_textfile.txt");
是否可以在C ++中执行此操作?
我已经尝试使用ifstream::rdbuf()
,这可能与此无关。我甚至不确定该怎么称呼所以我现在只是把它称为隐形文本文件。
我正在使用Windows 7 64位。 MinGW编译器。
答案 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
数据的更多帮助,请优化您的问题,或者提出新问题。