【问题标题】:Create an invisible text file in C++ [closed]在 C++ 中创建一个不可见的文本文件 [关闭]
【发布时间】:2016-07-17 07:26:27
【问题描述】:

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

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

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

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

在 C++ 中可以做到这一点吗?

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

我使用的是 Windows 7 64 位。 MinGW 编译器。

【问题讨论】:

  • 隐形文件是指隐藏文件吗?
  • 如果你想避免在浏览器中显示文件,为什么不能不调用 browser::load()?
  • 存在误解。浏览器所做的是获取文件并在浏览器中显示其内容。它可以设置为考虑列来对齐行和列。
  • 不可见的文件,是的.. 就像一个 fstream 不是很好的文件。
  • 那么您希望此文本在哪里?嵌入二进制程序(通常,至少在 Qt 中,称为“资源”)?

标签: c++ text-files fstream fltk


【解决方案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 的帮助,请完善您的问题,或者提出一个新问题。

【讨论】:

  • hyde,你读过 svet 的问题吗?这不是她要问的。很明显,加载方法需要一个文本文件..
  • @domonica 当我读到这个问题时,OP 特别不想要一个实际的文本文件,他们想要别的东西。使用命名管道或其他能够使用 load() 的东西将是 Rube Goldbergian 的装置来实现结果,当有 add() 方法时,它可以直接做到。
【解决方案2】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多