我正在编写一个Firefox附加组件,用于存储和打开存储在基本目录中的文件(用户选择作为首选项的目录)。我想让用户轻松复制该目录并将其移动到另一台计算机(可能在OSX,Linux和Windows之间切换)。
我认为这样做的第一种方法就是将文件路径的一部分存储在基本目录之后,如果操作系统是Windows,则将所有的更改为/。然后在使用路径时,将存储的路径连接到当前基本目录(如果操作系统是Windows,则将所有/替换为\'s)。
这是合理的还是不好的做法?如果有人在OSX路径中使用\(我认为这是可能的,但也许这些斜杠是一些看起来像文件分隔符的其他字符\?),它可能会导致不必要的行为。我想到的一个替代方法是使用nsIFile并通过递归使用parent和leafName来构建相对路径来挑选每个目录名称并将其保存到字符串之间使用类似“”的字符串,然后我可以用适当的路径分隔符替换它对于操作系统。这似乎比我的第一种方法更强大,但也许有一种更简单,更标准的解决方案?
答案 0 :(得分:1)
您不需要发明自己的解决方案,有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);
相对描述符是跨平台的,你可以移动目录做不同的操作系统,描述符也不会改变。
答案 1 :(得分:0)
我在搜索中遇到过这个问题。现在有一个新的解决方案。这是OS.File:https://developer.mozilla.org/en-US/docs/JavaScript_OS.File/OS.File_for_the_main_thread