登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> SoftHub关联区 >> 主题: [golang的坑]golang 如何访问 macos 下的 resource 目录 -- macos 下无法将图片放到 exe 目录怎么办     [回主站]     [分站链接]
[golang的坑]golang 如何访问 macos 下的 resource 目录 -- macos 下无法将图片放到 exe 目录怎么办
clq
浏览(195) - 2023-05-04 16:32:58 发表 编辑

关键字:

[2023-05-04 19:01:48 最后更新]
[golang的坑]golang 如何访问 macos 下的 resource 目录 -- macos 下无法将图片放到 exe 目录怎么办

答案是要使用默认的 "Resources" 然后再参考以下的回答。
---------------------------------------------------------------

golang 如何访问 macos 下的 resource 目录

在 macOS 下,resource 目录是一个特殊的目录,用于存储应用程序的资源文件,例如图像、声音和视频。

要访问 macOS 下的 resource 目录,可以使用以下代码:

package main

import (
"fmt"
"os"
"path/filepath"
)

func main() {
// 获取应用程序的路径
appPath, err := filepath.Abs(filepath.Dir(os.Args[0]))
if err != nil {
panic(err)
}

// 拼接 resource 目录的路径
resourcePath := filepath.Join(appPath, "..", "Resources")

// 打印 resource 目录的路径
fmt.Println(resourcePath)
}


在上面的代码中,我们首先使用 os.Args 获取应用程序的路径,然后使用 filepath.Abs 获取该路径的绝对路径。接着,我们使用 filepath.Join 拼接 resource 目录的路径,并将路径打印出来。

需要注意的是,在将应用程序打包成 .app 文件后,resource 目录的路径会发生变化。此时,可以使用相对路径 ../Resources 来访问 resource 目录。


clq  2023-05-04 16:36:42 发表 编辑

有没有 golang 版本

当然有,下面是使用 Golang 的代码示例:

import (
"io/ioutil"
"os"
"path/filepath"
)

func main() {
fileName := "example.txt"
documentsDirectory, err := os.UserDocumentsDir()
if err != nil {
// 获取文档目录失败,处理错误
}
filePath := filepath.Join(documentsDirectory, fileName)
fileContent, err := ioutil.ReadFile(filePath)
if err != nil {
// 文件读取失败,处理错误
}
// 使用读取到的文件内容
}


在上述示例中,首先通过 os.UserDocumentsDir() 函数获取用户文档目录的路径,然后使用 filepath.Join() 函数拼接文件的完整路径。接着使用 ioutil.ReadFile() 函数读取文件内容,如果读取失败则处理错误,否则使用读取到的文件内容进行后续操作。需要注意的是,在沙盒环境下,应用程序只能访问其自己的沙盒目录以及一些系统指定的目录,因此在上述示例中使用的路径都是沙盒内的路径。如果需要访问其他目录,建议使用用户选择文件的方式。

clq  2023-05-04 16:38:52 发表 编辑

macos沙盒机制下如何访问目录?

在 macOS 沙盒机制下,应用程序的权限是受限的,可能无法访问某些敏感数据和资源,例如用户的桌面、文档等目录。但是,macOS 还提供了一些方法,允许应用程序在沙盒环境下访问某些目录。


让用户选择需要访问的目录


在沙盒环境下,应用程序只能访问其自己的沙盒目录以及一些系统指定的目录,如果需要访问其他目录,可以使用 NSOpenPanel、NSSavePanel 等系统提供的文件选择器,让用户选择需要访问的目录或文件。用户选择的目录或文件会被授予应用程序访问权限。


使用用户主目录下的目录


在沙盒环境下,应用程序可以访问用户主目录下的一些目录,例如 ~/Documents、~/Downloads、~/Desktop 等。可以使用 NSFileManager 类的 URLsForDirectory:inDomains: 方法获取这些目录的 URL,并访问其中的文件。

例如,要访问用户文档目录下的一个名为 example.txt 的文件,可以使用以下代码:

NSError *error;
NSString *fileName = @"example.txt";
NSURL *documentsDirectory = [[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask].firstObject;
NSURL *fileURL = [documentsDirectory URLByAppendingPathComponent:fileName];
NSString *fileContent = [NSString stringWithContentsOfURL:fileURL encoding:NSUTF8StringEncoding error:&error];
if (fileContent) {
// 文件内容读取成功
} else {
// 文件读取失败,处理错误
}


以上是使用 Objective-C 的代码示例,Swift 也有类似的 API。

clq  2023-05-04 16:40:52 发表 编辑

govcl 如何打开选择目录对话框

在GoVCL中打开选择目录对话框比较简单,只需要使用 TSelectDirectoryDialog 对象即可,下面是一个示例代码:

package main

import (
"github.com/ying32/govcl/vcl"
)

func main() {
vcl.Application.Initialize()

dlg := vcl.NewSelectDirectoryDialog(vcl.Application.MainForm())
if dlg.Execute() {
vcl.ShowMessage("选择的目录为:" + dlg.Directory())
}
dlg.Free()

vcl.Application.Run()
}


在上述示例中,TSelectDirectoryDialog 对象用于打开选择目录对话框,使用 Execute 方法执行选择操作,如果选择了目录,则获取目录路径并进行处理。需要注意的是,一定要在对话框使用完成之后释放资源,否则可能会引起内存泄漏。

clq  2023-05-04 19:01:48 发表 编辑

macos 的 app 可以不用沙盒吗

是的,macOS 的应用程序可以在开发的时候选择不使用沙盒。选择不使用沙盒可以让应用程序在用户主目录和其他系统目录中创建和修改文件。不过,由于沙盒是苹果官方推荐的安全保护机制,应该只在必要时才考虑禁用沙盒。

要创建不使用沙盒的 OS X 应用程序,请按照以下步骤进行操作:



在 Xcode 中创建一个新的项目。



在项目设置中,选择“Capabilities”选项卡。



将“App Sandbox”设置为关闭状态。



如果应用程序需要访问用户的默认目录,则需要请求用户授予权限。可以通过使用NSSavePanel、NSOpenPanel或PHPhotoLibrary来请求权限。但是请注意,在授权用户之前,您必须告诉用户您的应用程序需要该权限的原因。



请注意,如果您使用的是 Mac App Store 发布应用程序,则必须使用沙盒。


总数:4 页次:1/1 首页 尾页  
总数:4 页次:1/1 首页 尾页  


所在合集/目录
golang的坑 更多



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1