是否有一种标准的跨平台方式来处理和存储相对文件路径
Is there a standard, cross-platform way to handle and store relative file paths?
我正在编写一个Firefox插件,用于存储和打开存储在基本目录(用户首选的目录)中的文件。我想让用户更容易地复制该目录并将其移动到另一台计算机(可能在OSX、Linux和Windows之间切换)。
我想做这件事的第一种方法就是将文件路径的一部分存储在基本目录之后,如果操作系统是Windows,则将所有的更改为/s。然后,当使用路径时,存储的路径会连接到当前的基本目录上(如果操作系统是Windows,则在将所有/替换为''之后)。
这种做法合理还是不好?如果有人在OSX路径中使用了''(我认为这是可能的,但这些斜杠可能是其他看起来像文件分隔符''?的字符),这可能会导致不必要的行为。我想到的一个替代方案是使用nsIFile,通过递归地使用parent和leafName来挑选每个目录名,并将其保存到一个字符串中,中间有"之类的东西,然后我可以用操作系统的适当路径分隔符来替换它,从而构建相对路径。这似乎比我的第一种方法更稳健,但也许有一个更简单、更标准的解决方案?
您不需要发明自己的解决方案,有nsILocalFile.getRelativeDescriptor()
。示例:
var file1 = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file1.initWithPath("c:''foo''");
var file2 = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file2.initWithPath("c:''foo''bar''test.txt");
alert(file2.getRelativeDescriptor(file1));
此代码将显示bar/test.txt
。要从相对描述符获取文件,请使用setRelativeDescriptor()
:
file2.setRelativeDescriptor(file1, "bar/test.txt");
alert(file2.path);
相对描述符是跨平台的,你可以将目录移动到不同的操作系统,描述符不会改变。
我在搜索中发现了这个。现在有了一个新的解决方案。它是OS.File:https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread
- 在承诺链中处理早期回报的最佳方式
- 如何处理javascript中的循环引用,类似于Excel提供迭代限制的方式
- 如何启用Emmet'的选项卡键处理程序(HTML快捷方式)
- 在Javascript HTML5+Canvas中处理精灵鼠标点击的最佳方式
- 如何以 Angular2 方式处理 ajaxStart 和 ajaxStop 事件
- 我怎样才能以非阻塞的方式处理数字
- 如何制作一个JavaScript函数,处理多组输入,以同样的方式进行数学处理
- React是装载前处理空对象的最佳方式
- 为什么'这'与函数对象一起使用时会有不同的处理方式
- 在IE / FF中使用getElementsByTagName时,自定义标签的处理方式不同
- 访问Google Analytics Realtime Reporting API(通过javascript)的处理方式
- 为什么函数声明在不同的浏览器中处理方式不同
- 更好的处理方式'这'在Javascript的闭包中
- RegEx在VBA和JavaScript中的处理方式有何不同?
- 窗口.Onerror函数在不同浏览器上的处理方式不同
- 在JavaScript中存储鼠标移动数据的最有效的处理方式是什么?
- noscript标签在不同浏览器中的处理方式
- 是“;静音”;以及“;体积=0.0”;还是一样?事件侦听器对它们的处理方式不同
- Photoshop/ESTK - 预定义的数值,处理方式与用户输入不同
- 为什么有很多有效数字的数字在c#和JavaScript中处理方式不同?