【问题标题】:How do I check if an embedded resource exists or not?如何检查嵌入式资源是否存在?
【发布时间】:2012-04-02 10:50:01
【问题描述】:

在 Delphi 中,我正在构建一个 HTTP 应用程序,或者说是一个 Web 服务器。它本质上是一个内置在单个 EXE 文件中的整个网站。我嵌入的文件包括 HTML、JS、CSS、SWF、PNG、XML 等。资源名称与原始文件名相同,将 . 替换为 _。最后,EXE 中会嵌入大约 40-60 个文件。

问题是我不想编写代码来包装每个单独的文件。现在,我为每个资源声明一个常量,并在使用TResourceStream 获取资源时使用该常量。 HTTP 请求请求任何特定文件,并且由于我将拥有一堆文件,因此我不想要单独的方式来处理每个文件。另外,将来,当我添加要嵌入的新文件时,我所要做的就是将它添加到我的资源脚本 (.rc) 中。所以我决定改变我的机制,将请求的文件名自动解析为资源的名称。例如,/Home.HTML 被解析为 HOME_HTML,这应该是嵌入资源的名称。我需要在加载之前检查这样的资源是否存在。

我可以尝试加载它并捕获任何异常,但是如果资源不存在,这会在调试中产生错误。如果不使用try..except,我将如何进行这样的检查?

【问题讨论】:

  • 你为什么要这样做?拥有从文件系统读取的网络服务器的主要优点之一是您可以更改站点上的内容,而无需更改服务器本身。现在,如果您需要更改文件或添加新文件,则必须构建新服务器,关闭现有服务器,复制新服务器,然后重新启动它。这看起来很糟糕,即使停机时间相对较短......
  • @MasonWheeler 实际上,我确实有数百个,实际上应用程序将动态生成的几乎一千个其他文件。嵌入的东西只是永远不会改变的关键东西。上述描述只是一个示例。我这样做的原因是为了分发。目标是能够将这个单一的 EXE 发送给某人并让他们立即能够运行它。
  • 我可以解释一下否决票吗?还是它只是通常的 Delphi 仇恨者之一?
  • 对我来说似乎是一个合理的问题,所以请免费投票。
  • @Jerry:啊,我明白了。好的,这更有意义。

标签: delphi validation embedded-resource


【解决方案1】:

使用 Win32 API FindResource() 函数。

【讨论】:

    【解决方案2】:

    您可以使用FindResource API,类似

    if(FindResource(hInstance, PChar(ResourceName), RT_RCDATA) <> 0)then begin
       // load the resource
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-11
      相关资源
      最近更新 更多