如何在Windows 8中使用在Mac上创建的重用软链接

时间:2014-01-28 11:00:55

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

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

现在我在Windows 8手机应用程序中移植相同的应用程序,所以我想在Windows Phone 8应用程序中重复使用相同的Softlink,那么我该如何使用它呢?

我试图在Windows 8机器中打开软链接,但它说“不支持文件格式”。

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

有没有其他方法可以重复使用相同的软链接?如果不是我能遵循的最佳方法。

修改

好的,这里有更多信息:

在MacBook Pro中

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

现在我在我的iOS应用程序中使用这些soflink。

在Windows 8中

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

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

我既有实际文件夹,也有soflink文件夹。

还有一点是,当您创建一个soflink时,在MacBook Pro中会显示以下图标:enter image description here

但是在Windows 8上它的空白没有那样。

3 个答案:

答案 0 :(得分:5)

你的问题缺少一些细节,所以我将不得不猜测你的情况。问题是:

  

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

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

  

您现在在FAT32文件系统上使用OS X创建了一些符号链接   您在访问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. 您可以重新考虑问题的解决方法,这样就不需要您使用符号链接。

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

    == EDIT ==

    查看有关符号链接here的subversion文档。 该文档的相关引用是:

      

    版本化符号链接

         

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

         

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

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

答案 1 :(得分:1)

问题可能是一个目录中有这么多链接

  

最多有31个重新分析点(因此符号链接)   允许在特定的道路上。

另见

答案 2 :(得分:1)

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

一些背景

符号链接语义在unixoid系统和Windows之间存在很大差异。如前所述,Windows使用重新分析点来实现符号链接和连接点(Server版本上的某些重复数据删除功能似乎也使用它)。

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

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

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

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

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

可能的兼容性

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

然而,将正斜杠转换为反斜杠是最不重要的。

this answer我已经概述了一些可能无法进行有意义翻译的案例。

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

但是,如果这样的符号链接/var/www/html/foobar并且指向../html1/foo/bar的可能性是,如果/var是OSX或Linux上的挂载卷,而现在是Windows,则相对目标路径仍然会生成感觉(在向前和向后斜线等调整之后)。

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

E.g。如果符号链接指向/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. 相对于同一个仓库(^/path
  3. 相对于架构(//server/path)或
  4. 相对于父目录
  5. 您可能希望该列表中包含2个或4个。但是,您很可能想要4,因为文件外部必须指向同一个存储库。

    长话短说

    如果您的图片位于trunk/images等文件夹中并且您有trunk/platforms/windows/images文件夹,则可以在svn:externals上设置trunk/platforms/windows属性以使其具有外部名称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中存在的一种符号链接,并在工作副本中显示为正确的文件,这意味着所有平台都可以平等地处理它们。