为什么我的javascript文件在一个位置创建文件,但试图从另一个位置读取?

为什么我的javascript文件在一个位置创建文件,但试图从另一个位置读取?,javascript,relative-path,createfile,Javascript,Relative Path,Createfile,我创建了一个变量来保存相对路径,因为我不能有直接路径,因为它将安装在不同的PC上 var mainUrlCONST = "../../annotations/annotate.xml"; 当程序的初始页面加载时,它会检查文件是否存在。 如果没有,它就会创建它 现在问题就出在这里,它从我想要的地方读出来,但如果它没有 看到那里的文件,它会在PC上的其他地方创建它,而不是我指定的位置 这将检查文件: function initializeAnnotationFile() { try

我创建了一个变量来保存相对路径,因为我不能有直接路径,因为它将安装在不同的PC上

var mainUrlCONST = "../../annotations/annotate.xml";
当程序的初始页面加载时,它会检查文件是否存在。 如果没有,它就会创建它

现在问题就出在这里,它从我想要的地方读出来,但如果它没有 看到那里的文件,它会在PC上的其他地方创建它,而不是我指定的位置

这将检查文件:

function initializeAnnotationFile()
{
    try
    {
        var connection = new ActiveXObject("Microsoft.XMLHTTP");
        connection.open("GET", mainUrlCONST, false);
        connection.send();

        if ( connection.readyState == 4 )
        {
        response = connection.responseText;
        }

        xml = response; 
        mainExists = true;
    }
        catch(e)
    {
        mainExists = false; 
    }
}
如果文件不存在,则会创建该文件:

function createAnnotationFile()
{
    var fso = new ActiveXObject("Scripting.FileSystemObject");
    var s = fso.CreateTextFile(mainUrlCONST, true);

    s.WriteLine( "<list>" );
    s.WriteLine( "  <section title='Annotations'>" );
    s.WriteLine( "  </section>" );
    s.WriteLine( "</list>" );
}

FSO
和相关路径出现问题。所有的文档都说,路径可以是绝对的,也可以是相对的,但就我个人而言,我从来没有找到过相对的路径来工作

我正在本地应用程序中使用基于安装文件夹的寻址系统。简化版本如下所示:

function getInstallBase() {
    var defInstal = 'Application_installation_folder_name',
        selfPath = window.location.pathname.replace(/\\/g,'/');
    if (selfPath.charAt(0) === '/') { // *
        selfPath = selfPath.substring(1, selfPath.length);
    }
    selfPath = selfPath.split(defInstal);
    return selfPath[0] + defInstal + '/';   
}
var defRoot = getInstallBase();
var s = fso.CreateTextFile(defRoot + 'annotations/annotate.xml', true);
*
=IE返回/G:/。。。当HTA返回G:/

defRoot
现在包含指向安装文件夹的绝对路径,无论它保存在何处

将此代码放入应用程序安装文件夹中的JS文件中。如果需要路径,请根据
defRoot
提供路径,即从安装文件夹中计数。在您的情况下(假设
文件夹
是安装文件夹),您可以这样使用它:

function getInstallBase() {
    var defInstal = 'Application_installation_folder_name',
        selfPath = window.location.pathname.replace(/\\/g,'/');
    if (selfPath.charAt(0) === '/') { // *
        selfPath = selfPath.substring(1, selfPath.length);
    }
    selfPath = selfPath.split(defInstal);
    return selfPath[0] + defInstal + '/';   
}
var defRoot = getInstallBase();
var s = fso.CreateTextFile(defRoot + 'annotations/annotate.xml', true);

我曾在便携式应用程序中使用过这种技术,它的效果非常好。您可以随时将可执行副本复制到记忆棒、CD、DVD上,而无需触摸代码。

FSO和相关路径出现问题。所有的文档都说,路径可以是绝对的,也可以是相对的,但就我个人而言,我从来没有找到过相对的路径来工作

我正在本地应用程序中使用基于安装文件夹的寻址系统。简化版本如下所示:

function getInstallBase() {
    var defInstal = 'Application_installation_folder_name',
        selfPath = window.location.pathname.replace(/\\/g,'/');
    if (selfPath.charAt(0) === '/') { // *
        selfPath = selfPath.substring(1, selfPath.length);
    }
    selfPath = selfPath.split(defInstal);
    return selfPath[0] + defInstal + '/';   
}
var defRoot = getInstallBase();
var s = fso.CreateTextFile(defRoot + 'annotations/annotate.xml', true);
*
=IE返回/G:/。。。当HTA返回G:/

defRoot
现在包含指向安装文件夹的绝对路径,无论它保存在何处

将此代码放入应用程序安装文件夹中的JS文件中。如果需要路径,请根据
defRoot
提供路径,即从安装文件夹中计数。在您的情况下(假设
文件夹
是安装文件夹),您可以这样使用它:

function getInstallBase() {
    var defInstal = 'Application_installation_folder_name',
        selfPath = window.location.pathname.replace(/\\/g,'/');
    if (selfPath.charAt(0) === '/') { // *
        selfPath = selfPath.substring(1, selfPath.length);
    }
    selfPath = selfPath.split(defInstal);
    return selfPath[0] + defInstal + '/';   
}
var defRoot = getInstallBase();
var s = fso.CreateTextFile(defRoot + 'annotations/annotate.xml', true);


我曾在便携式应用程序中使用过这种技术,它的效果非常好。您可以随时将可执行副本复制到记忆棒、CD、DVD上,而无需触摸代码。

您的问题缺少基本信息:1。这是在什么环境下运行的?2.查找文件的代码是什么样子的?3.写入文件的代码是什么样子的?4.文件在哪里结束?5.你以为它会在哪里结束?6.你为什么这么想?你没有给我们看任何代码。当您没有向我们展示您正在做什么时,您希望我们如何帮助您?您编写文件的代码是什么样子的?读文件怎么样?这不仅仅是关于路径,而是你如何使用路径。另外,在路径名中使用
来设计可在机器之间移植的脚本似乎是个坏主意。@AlexWayne他没有说它可以移植,只是说它可以安装在多台机器上。@techfoobar这似乎是非常面向IE的代码,
localStorage
在IE中的本地应用程序中不可用。您的问题缺少基本信息:1。这是在什么环境下运行的?2.查找文件的代码是什么样子的?3.写入文件的代码是什么样子的?4.文件在哪里结束?5.你以为它会在哪里结束?6.你为什么这么想?你没有给我们看任何代码。当您没有向我们展示您正在做什么时,您希望我们如何帮助您?您编写文件的代码是什么样子的?读文件怎么样?这不仅仅是关于路径,而是你如何使用路径。另外,在路径名中使用
来设计可在机器之间移植的脚本似乎是个坏主意。@AlexWayne他没有说它可以移植,只是说它可以安装在多台机器上。@techfoobar这似乎是非常面向IE的代码,
localStorage
在IE中的本地应用程序中不可用。我继续并将其标记为答案,因为我毫不怀疑这会起作用,但由于该应用程序目前作为网站运行,尚未打包和安装,没有设置安装路径。@xRuhRohx我在由intranet服务器运行的HTA中也使用了该路径,没有问题。可能您需要设置
defRoot
以进行测试,当在服务器上时,最终在客户端机器上执行HTA。当它检查文件时,它检查在正确的位置,但当它写入时,它希望写入桌面。我的假设是因为它在IE中运行,还没有打包成应用程序并安装。@xRuhRohx也许你的假设是对的。无论如何,如果您正在开发一个桌面应用程序,那么在桌面环境中也这样做会很自然吗?HTA在本地也能流畅地运行,无需任何打包。我继续并将此标记为答案,因为我毫不怀疑这会起作用,但由于该应用程序目前作为网站运行,尚未打包和安装,因此没有设置安装路径。@xRuhRohx我在由intranet服务器运行的HTA中也使用了此选项,没有任何问题。可能您需要设置
defRoot
以进行测试,当在服务器上时,最终在客户端机器上执行HTA。当它检查文件时,它检查在正确的位置,但当它写入时,它希望写入桌面。我的假设是因为它在IE中运行,还没有打包成应用程序并安装。@xRuhRohx也许你的假设是对的。无论如何,如果您正在开发一个桌面应用程序,那么在桌面环境中也这样做会很自然吗?你跑得很流利吗