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

Create an invisible text file in C++

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

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

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

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

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

我已经尝试使用 ifstream::rdbuf(),这可能与此无关。我什至不知道该怎么称呼它,所以我暂时称它为不可见的文本文件。

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

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

您可能已经知道如何读取/写入标准文件(例如 http://www.cplusplus.com/doc/tutorial/files/). Now, if you just want to hide the file from the user, you can set OS specific hidden flags (e.g. windows)。我假设这不是您真正想要在这里完成的。 (您显然也可以创建一个临时文件,然后再次删除,但这也不是一个优雅的解决方案。)

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

不过,总的来说,除非 browser API 允许您将包含文本文件的完整字符串或 stringstream 传递给它,否则您将需要一个文件对象.

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

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

假设您要添加的内容相当于这样的文本文件:

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 使用您的数据的更多帮助,请完善您的问题,或者提出一个新问题。