【问题标题】:hide file for my application隐藏我的应用程序的文件
【发布时间】:2015-08-20 17:48:06
【问题描述】:

作为一个初学者,我有一个小问题。我已经完成了在 C++ Builder 中开发的一个小应用程序的概念。 我使用了一个包含大量文本的 Tmemo,以便在我的应用程序中使用它们。 在加载中我注意到当 Tmemo 有大量数据时,它会减慢加载速度。应用程序可以在 3/4 秒或更长时间后显示! 所以我决定使用一个包含所有文本的文件。并使用 TstringList 它运行良好且运行速度快,但我不希望睁大眼睛显示数据。

所以我想问是否有一种方法可以向用户隐藏文本文件,应用程序可以使用它并快速加载其信息。

【问题讨论】:

    标签: c++ file c++builder tmemo


    【解决方案1】:

    窗口: 您可以通过调用 SetFileAttributes 并设置 FILE_ATTRIBUTE_HIDDEN 标志来实现。见http://msdn.microsoft.com/en-us/library/aa365535%28VS.85%29.aspx

    Linux: 只需创建以点开头的文件。 (.文件名)

    【讨论】:

    • Windows 可以选择向用户显示隐藏文件。
    【解决方案2】:

    将大量文本加载到TMemo 中并没有什么“快速”。它是一个 UI 控件,您正在将文本复制到 UI 的内部缓冲区中。所以加载需要时间。

    但是,为了帮助加快应用程序的启动,请不要在设计时将大量文本直接放在 TMemo 中。从 DFM 流式传输需要一些时间,这会减慢表单的创建速度,正如您所经历的那样。

    相反,将文本放入一个单独的文件中,并通过将.rc 文件添加到您的项目中,将其编译到您的应用资源中:

    MYTEXT RCDATA "mytext.txt"
    

    然后,您可以在运行时使用TResourceStream 访问资源数据并使用LoadFromStream() 方法将其加载到TMemo

    #include <memory>
    
    void TMyForm::LoadMemoText()
    {
        std::auto_ptr<TResourceStream> strm(new TResourceString(HInstance, "MYTEXT", RT_RCDATA));
        Memo1->Lines->LoadFromStream(strm.get());
    }
    

    当您准备好加载TMemo 文本时调用LoadMemoText(),例如在表单的OnShow 事件中,或在计时器中,或响应用户操作,或在您需要的任何时候。这将使表单有机会在您加载文本之前更快地创建并向用户显示。

    无需在用户的硬盘上放置隐藏文件。您可以将文本嵌入到 .exe 文件中,只是在创建表单时不会自动加载。当你准备好加载它时加载它。

    【讨论】:

      猜你喜欢
      • 2013-08-29
      • 1970-01-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 1970-01-01
      • 2015-11-15
      • 1970-01-01
      相关资源
      最近更新 更多