• Из-за обновления GTA 5 (был добавлен новый патч) может временно не работать вход в RAGE Multiplayer.

    ERROR: Your game version is not supported by RAGE Multiplayer.

    Данная ошибка говорит о том, что GTA V обновилась до новой версии (GTA Online тоже). Вам необходимо обновить саму игру в главном меню вашего приложения (Steam / Epic Games / Rockstar Games).
    Если после этого RAGE:MP все равно не работает - вам нужно дождаться выхода патча для самого мультиплеера (обычно это занимает от нескольких часов до нескольких дней).

    Новости и апдейты Rockstar Games - https://www.rockstargames.com/ru/newswire/
    Статус всех служб для Rockstar Games Launcher и поддерживаемых игр: https://support.rockstargames.com/ru/servicestatus


    Grand Theft Auto 5 (+ GTA Online) последний раз были обновлены:

Мануал Урок Работа с файлами (создание/запись/чтение/удаление)

nettkom

Специалист
Автор темы
14 Сен 2020
58
42
82
Для работы с файлами используется встроенный модуль fs. Ссылка на подробную документацию по этому модулю: File System

Чтобы использовать модуль подключаем его в начале скрипта

JavaScript:
var fs = require('fs');

Все операции с файлами можно делать синхронно и асинхронно. Синхронные операции всегда ждут когда действие с файлом выполнится и возвращают результат. При этом блокируется основной поток и весь сервер ждет. Асинхронные же операции не выполняются сразу после вызова. Результат работы становится известным позже, и для того, чтобы оповестить приложение о полученных значениях, асинхронная функция вызывает другую функцию (callback), которую мы передаем в аргументах при запуске.


Как прочитать содержимое файла?
Давайте для примера прочитаем что-то из файла.


JavaScript:
var fs = require('fs'); // подключаем модуль

// Асинхронное чтение
fs.readFile( __dirname + '/test.txt', function(err,data){
    console.log('async read: ' + data);
});

//Синхронное чтение
var data = fs.readFileSync(__dirname + '/test2.txt');
console.log('sync read: ' + data);


Предопределенная переменная __dirname содержить путь к папке в которой лежит данный скрипт.

Если указанный файл не найден, то при синхронном чтении будет выброшено исключение (Exception), а в асинхронном варианте ошибка прийдет в callback функцию в первом аргументе err.


JavaScript:
// Асинхронное чтение
fs.readFile( __dirname + '/notexist.txt', function(err,data){
    if(err){
        return console.log('async read error: ' + err); // async read error: Error: ENOENT: no such file or directory, open 'C:\RAGEMP\server-files\packages\fs-test\notexist.txt'
    }

    console.log('async read: ' + data);
});

//Синхронное чтение
try{
    var data = fs.readFileSync(__dirname + '/notexist.txt');
    console.log('sync read: ' + data);
}catch(e){
    console.error('sync read error: ' + e); // sync read error: Error: ENOENT: no such file or directory, open 'C:\RAGEMP\server-files\packages\fs-test/notexist.txt'
}


Как записать текст в файл?
Теперь запишем какой-нибудь текст в файл.
Примечание: здесь и далее будем пользоваться только асинхронными функциями, при необходимости их можно легко будет переделать под синхронные (как в примерах выше).


JavaScript:
fs.writeFile(__dirname + '/hello.txt', "Hello, world!", function(err){
    if(err)throw err;

    console.log('Текст записан в файл'); // выведем сообщение когда запись будет завершена
});

file-write.JPG



При каждом вызове этого кода файл будет перезаписываться. Если же мы хотим дописывать что-то в конец файла (например, для ведения логов), то нужно использовать fs.appendFile

Код:
fs.appendFile(__dirname + '/hello.txt', '\r\nНовая строка текста', (err) => {
    if (err) throw err;

    console.log('Текст добавлен в файл');
});

В начале фрагмента текста который нужно записать в файл мы добавили символы \r\n - комбинация этих символов позволяет сделать перенос строка, чтобы наш текст добавился не в ту же строку, а с новой.

file-write.JPG



Как удалить файл?
Теперь удалим наш файл hello.txt


Код:
fs.unlink(__dirname + '/hello.txt', (err) => {
    if (err) throw err;
    
    console.log('hello.txt был удален');
});

Обратите внимание что здесь и в примере выше в callback функцию передается только один аргумент err, который при наличии ошибок будет не пустой (что мы и проверяем и выбрасываем исключение).



Пример создания простого чат логгера. Он будет записывать все что напишут игроки в текстовый файлик.
Для реализации пригодится серверное событие playerChat


JavaScript:
var fs = require('fs');
const { EOL } = require('os');

mp.events.add("playerChat", (player, text) => {
    const entry = player.name + ': ' + text + EOL;

    fs.appendFile(__dirname + '/chatlog.txt', entry, (err) => {
        if (err) throw err;
    });
});

В данном примере EOL этот тот же перенос строки что и в уроке, но уже универсальный под любою операционную систему.
Avtor
Lev Angel
 
  • Like
Реакции: Maylo