【问题标题】:How to use reuse softlinks created on Mac in Windows 8如何在 Windows 8 中使用在 Mac 上创建的重用软链接
【发布时间】:2014-01-28 11:00:54
【问题描述】:

我的软链接很少,我在 MacBook Pro 中创建了 1000 张图片,并在我的 iOS 应用程序中使用。

现在我在 Windows 8 手机应用程序中移植了同一个应用程序,所以我想在 Windows 手机 8 应用程序中重用相同的软链接,那么我该如何使用呢?

我尝试在 Windows 8 机器上打开软链接,但提示“不支持文件格式”。

我的 Windows 机器中既有原始文件又有软链接。

还有其他方法可以重用相同的软链接吗?如果不是,我可以遵循的最佳方法是什么。

编辑

好的,这里有更多关于此的信息:

在 MacBook Pro 中

我在桌面上有一个包含物理路径(实际图像)的文件夹,现在我使用脚本创建了软链接,这些软链接被放置在一些不同的文件夹中。

现在我在我的 iOS 应用中使用这些软链接。

在 Windows 8 中

我已经从 Mac 复制了包含软链接的文件夹以及包含实际文件的文件夹。

现在我已经在我的桌面上粘贴了实际的文件夹和一些 D: 驱动器中的 soflinks 文件夹,如果我现在去 D 驱动器中的我的 soflink 文件夹并且当我检查这些图像时它显示为空白,因为它没有指向实际的文件。

我既有实际的文件夹,也有软链接文件夹。

还有一点是,当你创建一个软链接时,在 MacBook Pro 中它会显示这个图标:

但在 Windows 8 上它是空白的。

【问题讨论】:

  • 你想用符号链接做什么?您不能将符号链接从 OS X 复制到 Windows(并让它工作)。
  • @WiredPrairie 谢谢,我正在尝试显示作为图像的软链接,但我不能使用它,所以还有其他方法吗?像我可以重用那些软链接的图像吗?
  • 他们指向的图像在哪里?
  • 我的 C 盘中既有原始文件夹,也有包含这些图像符号链接的文件夹
  • 您可以使用原始图像。没有别的。

标签: c# windows windows-8 windows-phone-8 symlink


【解决方案1】:

您的问题缺少一些细节,因此我将不得不猜测您的情况。问题是:

您使用 OS X 在文件系统上创建了一些符号链接,现在您是 在 Windows 中访问这些符号链接时遇到问题。

除非您做了一些棘手的事情,例如安装 3rd 方文件系统驱动程序,否则 Windows 和 OS X 都可以本地读取/写入的唯一文件系统是基于 FAT 的。所以我猜你的情况是:

您使用 OS X 在 FAT32 文件系统上创建了一些符号链接,现在 您在 Windows 中访问这些符号链接时遇到问题。

假设上述情况,问题在于 FAT32 中没有符号链接,因为文件系统不支持它们。 OS X 欺骗了你,因为它“正常工作”。真正发生的是 OS X 正在创建一个 ASCII 文本文件,其中包含“XSym”行以及它“链接”到的文件的名称,以及一些文件系统信息。您可以通过在记事本中打开 Windows 系统上的软链接来确认这一点。通常,如果您在记事本中打开实际图像,您会看到二进制代码,但您应该看到来自这些虚假符号链接的文本。

那么,你是做什么的?我看到了几个选项:

  1. 您可以使用支持软链接的文件系统。这可能意味着使用 HFS+(OS X 文件系统),这需要您在 Windows 系统上安装 HFS+ 驱动程序,以便它可以读取/写入文件系统。或者,这可能意味着在另一个方向上使用 NTFS(Windows 文件系统),这需要您在 Mac 上安装 NTFS 驱动程序。请注意,最新版本的 OS X 可以读取 NTFS 文件系统,但无法写入。

  2. 您可以使用 OS X 创建的虚假符号链接。这将需要编写一个解析器来解释链接或找到一个为您执行此操作的库。我没有副本,但我相信 XSym 格式在“OS X Internals”一书中有所介绍。

  3. 您可以重新考虑解决问题的方法,这样就不需要使用符号链接。

如果这不能解决您的问题,请提供更多详细信息,因为我不得不对您的情况做出一些猜测。

==编辑==

查看关于符号链接here 的颠覆文档。 文档中的相关引用是:

版本化符号链接

在非 Windows 平台上,Subversion 能够对 特殊类型的符号链接(或“符号链接”)。符号链接是一个文件 充当一种对其他对象的透明引用 文件系统,允许程序读取和写入这些对象 间接通过对符号链接本身执行操作。

当符号链接提交到 Subversion 存储库时,Subversion 记得文件实际上是一个符号链接,以及对象 符号链接“指向”的位置。当该符号链接被签出到 非 Windows 系统上的另一个工作副本,Subversion 重建 来自版本化符号链接的真实文件系统级符号链接。但 这绝不会限制工作副本的可用性 Windows 等不支持符号链接的系统。在这样的系统上, Subversion 只是创建一个常规文本文件,其内容是 指向原始符号链接的路径。虽然该文件不能 在 Windows 系统上用作符号链接,它也不会阻止 Windows 用户从执行他们的其他 Subversion 相关 活动。

基本上,它说的类似于我之前提到的内容,即即使在 Windows 系统上完全不支持符号链接。 Subversion 只是使用链接的内容创建文本文件,因此您可以选择自己弄清楚如何解析这些文本文件,或者尝试找到一个可以为您解析它们的库。

【讨论】:

  • 请看我的编辑,希望我已经提供了关于这个主题的足够信息,如果您需要任何信息,请告诉我。
  • @Goofy 你没有提到这个文件夹的创建位置。您是在 OS X 中在外部 USB 驱动器、网络共享还是计算机上的单独分区上创建文件夹?此外,您是使用 Bootcamp 在同一台计算机上运行 Windows 来访问这些文件,还是它们位于您能够附加到 Windows 的可移动文件系统上?无论哪种方式,听起来您的问题就是我所描述的,这意味着您的解决方案是我上面提到的 3 点之一。
  • 好的,再次具体说明一下,我的 SVN 中有这些文件夹,我已经在 Macbook 和 Windows 8 上检查了这两个文件夹(包含实际文件的文件夹和包含软链接的文件夹)。我希望它立即清除
  • 您从未提到您正在使用 SVN RCS 在系统之间传输文件。请参阅上面的编辑。
  • 我已经在 Ubuntu 和 Mac 上检查了这些文件夹,它工作正常,我的意思是我能够看到这些图像,现在我的问题是我没有使用 SVN,但我仍然有将 USB 驱动器中的文件复制并粘贴到我的 Windows 机器上,但它仍然无法正常工作,我需要一些方法来在 Winodws 机器上重用这些链接,我需要你的帮助
【解决方案2】:

可能问题是一个目录下的链接太多

最多有 31 个重解析点(因此是符号链接) 允许在特定路径中。

另请参阅

【讨论】:

  • 据我所知符号链接(软链接)是重解析点。
  • 您的来源没有谈论目录中的最大重解析点,而是在特定的 path 中,也就是说:具有 32+ 符号链接化合物的路径(例如./link1/link2/link3/.../link32/link33) 会失败。
  • 对于初学者来说,缺少创建符号链接的一方的信息。这是相关的,因为虽然 Windows 具有从 Vista 开始的符号链接,但与 unixoid 系统相比,their semantics differ significantly。所以说链接是在 OSX 上创建的,因此它的位说明了这一事实,Windows 的文件系统驱动程序可能可以透明地将其转换为重解析点并处理它,但它只对相对符号链接的子集。如果没有额外的“提示”,指向绝对路径的符号链接将毫无意义。
  • 它仍然需要在该文件系统驱动程序中进行特殊处理,并且对于大多数链接路径来说,有意义的“翻译”可能仍然是不可能的。
【解决方案3】:

我知道我迟到了,但我希望其他人可以从我的回答中受益,即使提问者可能已经很久了。

一些背景

unixoid 系统和 Windows 之间的符号链接语义有很大不同。如前所述,Windows 使用重解析点来实现符号链接和连接点(服务器版本上的一些重复数据删除功能似乎也使用了它)。

现在,重解析点包含额外的数据,作为 I/O 管理器和对象管理器的提示。本质上,基于重解析点标记(GUID)可以确定重解析点的类型,然后文件系统过滤器驱动程序处理详细信息。您可以在第 6 版的“Windows Internals”第 9 章或最近的 Windows Driver Kit 或 MSDN 上的REPARSE_GUID_DATA_BUFFER(和相关主题)下找到对此的适度详细描述。

在 unixoid 系统上,文件系统元数据还包含(文本文件)是符号链接的线索。如果您使用ls -l,则该线索以前导l 的形式可见,例如在:

lrwxrwxrwx  1 user group         38 2015-10-12 11:51

符号链接的实际内容也是系统特定的,例如在 Linux 上,它们仅包含目标路径。

Windows 和 *nix 符号链接的共同点是目标在创建时不需要存在。同样在 Windows 上,符号链接可以指向网络位置,这很特殊因为在 Windows 上的网络路径与本地路径不同。

可能的兼容性

假设在 OSX 或 Linux 端创建了符号链接,我们可以想象一定程度的兼容性。如果 Windows 端的文件系统驱动程序现在将符号链接呈现为重解析点,并且某些方(所述文件系统驱动程序或文件系统过滤器)将处理这些重解析点,则可以解释符号链接的目标路径某种方式。

然而,将正斜杠转换为反斜杠是最不值得关注的问题。

this answer 中,我已经概述了一些不可能进行有意义翻译的情况。

基本上我认为唯一可能兼容的符号链接类型是相对符号链接。但即使对于那些有必要指出目标路径可能不会指向在 Windows 端可见的文件夹层次结构之外。也就是说,如果您在 OSX 或 Linux 端的符号链接驻留在 inside /var/www/html 并指向 ../../../something,则在 /var 是 Windows 上已安装的卷的情况下它变得毫无意义。

但是,如果这样的符号链接 /var/www/html/foobar 和指向 ../html1/foo/bar 的可能性是,如果 /var 是 OSX 或 Linux 上的挂载卷,现在在 Windows 上,则相对目标路径仍然有意义(经过调整,例如正斜杠等)。

对于任何绝对目标路径,文件系统驱动程序或文件系统过滤器驱动程序必须获得一些关于如何将符号链接的源形式转换为目标形式的提示。

例如如果符号链接指向/home/foo/bar/home 部分可能会转换为特定的已安装卷。

但是您已经可以看到,这需要大量的用户干预,这可能就是为什么大多数人会认为即使尝试有意义的翻译也是徒劳的。

SVN 的可能解决方法

您可能的解决方法是使用 SVN 外部。这取决于具体的场景,但由于您使用的是 SVN,因此您会想到它们。

您可以将 SVN 外部视为 Subversion 的本地符号链接。我以这种方式使用过它们,并且我知道其他几个人也使用过,但我不知道这种思路和后续用法有多普遍。

注意:指向文件的外部对象 仅在 SVN 1.6 中引入,因此在您的场景中这可能是也可能不是问题。

SVN externals come in several flavors。您可以为文件夹或文件(仅 1.6 及更高版本的文件)设置它们。

外部可以指向:

  1. 外部回购 (schema://server/path)
  2. 相对于同一个 repo (^/path)
  3. 相对于架构 (//server/path) 或
  4. 相对于父目录

您可能需要该列表中的 2 或 4 个。不过,您很可能需要 4 个,因为 file externals 必须指向同一个存储库。

长话短说

如果您的图像位于诸如 trunk/images 之类的文件夹中,并且您有一个文件夹 trunk/platforms/windows/images,您可以将 trunk/platforms/windows 上的 svn:externals 属性设置为有一个名为 images 的外部指向 ../../images (即外部目录),或者假设您想在trunk/platforms/windows/images 下使用不同的层次结构或不同的名称,您可以像这样创建文件外部images 子目录必须存在于 WC 中):

cd trunk/platforms/windows
svn propedit svn:externals images

并像这样添加单独的外部:

../../../images/filename.jpeg other-filename.jpeg

请注意,目标目录需要存在于存储库和工作副本中,所以对于这样的外部:

../../../images/filename.jpeg foo/other-filename.jpeg

子目录trunk/platforms/windows/images/foo必须存在。

更新您的工作副本将导致这些外部文件在工作副本中显示为版本化文件。因此它们是一种存在于 SVN 中的符号链接,并在工作副本中显示为适当的文件,这意味着 所有 平台都可以平等地处理它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2015-01-03
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    相关资源
    最近更新 更多