我目前正在使用Qt在macOS High Sierra(不是Windows(上进行开发。只是使用常规的macOS而不是macOS服务器。显然,我很高兴在Qt气泡之外编写仅限Mac的代码来解决此问题。
我正在寻找一种以编程方式检查 C/C++ 或 Objective-C 中是否在本地网络上共享特定本地文件夹的方法。或者,我想检索所有共享文件夹的列表。我希望该方法适用于相当大范围的 macOS 版本,例如 10.9 到 10.14。
我需要这样做才能将本地文件的路径重写为 UNC 路径,以便可以通过具有适当凭据的 SMB 共享从同一网络上的 Windows 客户端计算机访问它们。这确实假定已设置共享文件夹,但如果尚未设置,用户将收到错误并提示共享合适的文件夹。
我可以使用 Finder 中的"获取信息"对话框共享/取消共享并查看文件夹的共享状态,但我正在寻找可以在应用程序中使用的内容。
我尝试过但没有成功的事情:
- 搜索问题的其他实例
- NSURL 类 - 不记录要查询其共享状态的资源名称。
- SMBTulit 似乎没有列出从运行它的机器共享的共享。
- SMBD 似乎没有任何命令行选项来查询共享文件夹。
- smbutil 和 smbd.conf 手册页中提到的各种配置文件不包含共享文件夹列表
- MDLS 在共享文件夹的输出中不包含任何相关元数据。
- ls -l@ 不会列出共享文件夹的任何额外信息
- 共享一个异常命名的文件夹,并在硬盘上查找文件夹名称,包括二进制文件,以查看此信息是否保留在某个位置。大概它以某种方式持久化,因为重新启动后文件夹已共享,但我在任何地方都找不到文件夹名称的任何记录。
- OpenDirectory 服务似乎在标题中包含大量对 SMB 的引用,但我看不到使用 OpenDirectory 获取从本地计算机共享的文件夹列表的方法。
- 共享根文件夹,以便重写变得微不足道。这有效,但共享根文件夹是不可取的。
- 也许有一种更好的访问方法可以避免拥有和查询 SMB 共享的需要......?
在 stackexchange 的其他地方找到了答案,由 mivk 回答。
运行以下命令并捕获输出。
共享 -l
这给出了一个略显冗长的文件共享列表,其中包含 afp 和 smb 的单独详细信息,可以对其进行解析以获取本地计算机上共享文件夹的列表。在卡塔琳娜州进行测试。如果未在"系统偏好设置"中启用文件共享,则此命令可能无法运行。