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

*= HTAがG:/ ..を返す場合、IEは/ G:/...を返します。

defRoot保存場所に関係なく、インストールフォルダへの絶対パスが含まれるようになりました。

このコードを、アプリケーションのインストールフォルダーにあるJSファイルに配置します。パスが必要な場合はdefRoot、インストールフォルダから数えたパスに基づいてパスを指定してください。あなたの場合(インストールフォルダを想定folder)、次のように使用できます。

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

私はこの手法をポータブルアプリに使用しましたが、それは魅力のように機能します。コードに触れることなく、いつでもどこでもメモリースティック、CD、DVDに実行可能コピーを作成できます。

于 2012-12-28T20:01:21.993 に答える