1

我创建了一个变量来保存相对路径,因为我不能有直接路径,因为它将安装在不同的 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>" );
}

这是有效的直接路径,如果它有帮助的话。

var mainUrlCONST = "G:/folder/annotations/annotate.xml";
4

1 回答 1

1

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();

*= IE 返回 /G:/... 当 HTA 返回 G:/...

defRoot现在包含安装文件夹的绝对路径,无论它保存在哪里。

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

var s = fso.CreateTextFile(defRoot + 'annotations/annotate.xml', true);

我已经将这种技术用于便携式应用程序,它就像一个魅力。您可以将可执行副本复制到记忆棒、CD、DVD 上,无论您想要什么,都无需接触代码。

于 2012-12-28T20:01:21.993 回答