Сведения о вопросе

nikolya

07:58, 1st October, 2020

Теги

JavaScript    

Как залочить файл в JScript(WSH)?

Просмотров: 254   Ответов: 1

Хочу блокировать файл с параметрами на время исполнения, чтобы при обращении к нему был отказ в доступе. Пробовал так:

var fso = new ActiveXObject('Scripting.FileSystemObject');
var Lockeds = new ActiveXObject("Scripting.Dictionary");

function LockFile(path) {
    if (!Lockeds.Exists(path)) {
        //открываю указанный файл в режиме добавления содержимого, и не закрываю его
        Lockeds.Add(path, fso.OpenTextFile(path, 8));
    }
}

function UnLockFile(path) {
    if (Lockeds.Exists(path)) {
        //Закрываю файл
        Lockeds.Item(path).Close();
        Lockeds.Remove(path);
    }
}


, но не помогает, к файлу все равно можно получить доступ на чтение.


Цель: исключить возможность одновременно работы более одной копии скрипта.

Делать запись, например, в лог не вариант, т.к. при сбое питания или перезагрузке не будет сделана запись об окончании работы.



  Сведения об ответе

screen

08:40, 26th September, 2020

Решил вопрос, надо было открывать не на чтение, при проверкке блокировки, а также на добавление.



var fso = new ActiveXObject('Scripting.FileSystemObject');

var Lockeds = new ActiveXObject("Scripting.Dictionary");



LockFile("2.ini");

CheckLocking("2.ini");

UnLockFile("2.ini");

CheckLocking("2.ini");



WScript.Quit();



function LockFile(path) {

    if (!Lockeds.Exists(path)) {

        Lockeds.Add(path, fso.OpenTextFile(path, 8));

    }

}



function CheckLocking(path) {

    try {

        var t = fso.OpenTextFile(path, 8);

        t.Close();

        return false;

    }

    catch (e) {

    }

    return true;

}





function UnLockFile(path) {

    if (Lockeds.Exists(path)) {

        Lockeds.Item(path).Close();

        Lockeds.Remove(path);

    }

}


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться