ExampleFunc()
{
if (!fexist("config/news.ini"))
{
printf("Конфиг '%s' не найден", "config/news.ini");
return;
}
new File: handle = fopen("config/news.ini", io_read);
if (handle)
{
// Код...
fclose(handle);
}
else
{
// Срабатывает именно вот эта часть кода
printf("Не удалось открыть конфиг '%s'", "config/news.ini");
}
}
return;
1 или 0 - сделай выбор) |
Явно проблема с правами доступа. |
Доступ к файлам мода, которые на Лине - я получаю только через фтп-клиент. Где ж я ввиду команду ls? Не особо шарю в таких тонкостях, поэтому хз
|
Работа по FTP производится под тем же пользователем, под которым работает игровой сервер. Никаких изменений прав не нужно - это ничего не исправит, однако может вызвать проблемы при их неправильной установке. В Вашем сообщении на форуме указано "Файлы снова стали читаться после перезагрузки" - это однозначно указывает на проблемы в моде, которые были убраны перезагрузкой. Очевидно, в случае сбоя ОС и/или файловой системы перезапуск программы никак бы не исправил ситуацию. |
сколько/какие файлы открыты |
#define MAX_OPENED_FILES (508) //на виндовс получилось открыть 507
#define MAX_PATH_LEN (64) //это от балды: я не знаю, что тут должно быть
enum of_enum
{
filepath[MAX_PATH_LEN],
File: filehandle
}
new opened_files[MAX_OPENED_FILES][of_enum];
new opened_files_count;
stock File: temp_fopen(path[], filemode:mode = io_readwrite)
{
new File: handle = fopen(path, mode);
if(handle)
{
if(opened_files_count < MAX_OPENED_FILES)
{
strmid(opened_files[opened_files_count][filepath], path, 0, MAX_PATH_LEN - 2, MAX_PATH_LEN);
opened_files[opened_files_count][filehandle] = handle;
opened_files_count ++;
}
else
{
printf("temp_fopen: слишком много открытых файлов (%s)", path);
}
}
return handle;
}
#define fopen temp_fopen
stock temp_fclose(File: handle)
{
new ret = fclose(handle);
if(ret == 1)
{
for(new i; i < opened_files_count; i++)
{
if(opened_files[i][filehandle] == handle)
{
opened_files_count--;
if(i != opened_files_count)
{
strmid(opened_files[i][filepath], opened_files[opened_files_count][filepath], 0, MAX_PATH_LEN - 2, MAX_PATH_LEN);
opened_files[i][filehandle] = opened_files[opened_files_count][filehandle];
}
break;
}
}
}
return ret;
}
#define fclose temp_fclose
COMMAND:openedfiles(playerid)
{
printf("На данный момент открыто файлов: %d", opened_files_count);
for(new i; i < opened_files_count; i++)
{
printf("%d) %s", i, opened_files[i][filepath]);
}
return 1;
}
// Макс. длина одной строки в логе (время + группа + текст)
const MAXLEN_STR_LOG = 300;
new str_log[STRING_256];
#define Log(%1,%2,%3);\
{format(str_log, STRING_256, %2, %3);\
_Log(%1, str_log);}
_Log(group[], text[])
{
new day, month, year, hour, minute, second;
getdate(year, month, day);
gettime(hour, minute, second);
new name_log[STRING_64];
format
(
name_log, STRING_64,
"log/%d/%02d/log_%02d.%02d.%02d.txt",
year, month, day, month, year-2000
);
new File:handle;
if (!fexist(name_log))
{
handle = fopen(name_log, io_write);
if (handle)
{
fclose(handle);
}
}
handle = fopen(name_log, io_append);
if (handle)
{
new str_fmt_log[MAXLEN_STR_LOG];
format
(
str_fmt_log, MAXLEN_STR_LOG, "%02d.%02d.%02d %02d:%02d:%02d <%s> %s\r\n",
day, month, year-2000, hour, minute, second, group, text
);
for (new i = 0; i < strlen(str_fmt_log); i++)
{
fputchar(handle, str_fmt_log[i], false);
}
fclose(handle);
}
else
{
printf
(
"Не удалось создать файл лога '%s'\n\
Возможные причины:\n\
1) отсутствует папка с именем 'log';\n\
2) отсутствует папка с текущим годом;\n\
3) отсутствует папка с текущим месяцем.",
name_log
);
}
}
Log("деньги", "%s (%d) передал игроку %s (%d) $%d", GetPlayerNameEx(from_id), from_id, GetPlayerNameEx(him_id), him_id, money);
Log("жалобы", "%s (%d) отправил ЖБ на %s (%d): %s", GetPlayerNameEx(senderid), senderid, GetPlayerNameEx(intruderid), intruderid, cmd_dest);
if (!fexist(name_log))
{
handle = fopen(name_log, io_write);
if (handle)
{
fclose(handle);
}
}
printf("На данный момент открыто файлов: %d", opened_files_count);
for(new i; i < opened_files_count; i++)
{
printf("%d) %s", i, opened_files[i][filepath]);
}
else
{
printf
(
"Не удалось создать файл лога '%s'\n\
Возможные причины:\n\
1) отсутствует папка с именем 'log';\n\
2) отсутствует папка с текущим годом;\n\
3) отсутствует папка с текущим месяцем.",
name_log
);
}
stabker через твой код попробывал сделать дебаг (таймер поставил в OnGameModeInit вместо команды, ибо вводить постоянно команду - это лольство). В клиентский лог постоянно выводит, что открыто 0 файлов, хотя ясен перец, что при входе в игру какие-то файлы открывались для чтения/записи. Код поключил разумеется сразу после a_samp.inc, в самый верх.
|