Задать вопрос
Ogoun
@Ogoun
Programmer

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

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

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


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


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

Делать запись, например, в лог не вариант, т.к. при сбое питания или перезагрузке не будет сделана запись об окончании работы.
  • Вопрос задан
  • 2753 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
Ogoun
@Ogoun Автор вопроса
Programmer
Решил вопрос, надо было открывать не на чтение, при проверкке блокировки, а также на добавление.


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);
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы