【问题标题】:Can't access files in my Mac APP Bundle无法访问我的 Mac APP Bundle 中的文件
【发布时间】:2014-11-15 18:18:34
【问题描述】:

我在我的 Mac OSX 上使用 wxwidget,只是无法让我的应用程序访问我的应用程序包中的资源目录。

我的资源文件夹中有一个文件名 image.bmp 并通过以下方式访问它:

    m_bitmap1 = new wxStaticBitmap( this, wxID_ANY, wxBitmap( wxT("Resources/image.bmp"), wxBITMAP_TYPE_ANY ), wxDefaultPosition, wxDefaultSize, 0 );

我的应用程序在该文件上大喊:“找不到文件错误”。我也尝试了 ./Resource,或者只是 image.bmp,但似乎没有任何效果。

查看应用程序文件,我可以在其中看到该文件。但出于某种奇怪的原因,它似乎忽略了它。

有什么想法吗?

【问题讨论】:

    标签: macos osx-mavericks wxwidgets


    【解决方案1】:

    默认情况下,wxOSX 只会从资源中加载 PNG 和 JPEG 位图,因此我建议您将位图转换为 PNG 并在 ctor 中使用wxBITMAP_TYPE_PNG_RESOURCE。您还需要删除显式的“Resources/”,因为路径会自动在包的此目录下查找。 IE。推荐的解决方案是使用wxBitmap("image.png", wxBITMAP_TYPE_PNG_RESOURCE)

    请注意,这也适用于 Windows,前提是您使用 RCDATA 类型将 PNG 嵌入到资源中,如 wxBITMAP_PNG() documentation 中所述。对于其他平台,您需要将其直接嵌入到程序代码中,这也在同一链接中进行了说明。

    否则,即如果您真的想使用 BMP,则需要使用 wxStandardPaths::GetResourcesDir() 显式构造位图的完整路径。

    【讨论】:

    • 我也尝试过使用 PNG,但没有成功。我还在 wxWidget 中使用了图像样本,似乎他们也有同样的问题。当我运行它时,它起作用了,但是我注意到在与 .app 文件相同的级别上有 cursor.png 文件(示例使用),我将其删除并仅保留在捆绑资源目录中,应用程序无法运行。所以我认为它本身就是行不通的。
    • 我忘了你需要明确使用wxBITMAP_TYPE_PNG_RESOURCE,我已经更新了我的答案来提及它。
    • 当我在 windows 环境下这样做时会发生什么?我的应用是多平台的。
    猜你喜欢
    • 2014-08-01
    • 1970-01-01
    • 2021-02-10
    • 2023-03-17
    • 2016-10-14
    • 2011-10-20
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多