Можно ли переименовывать папку через плагин amxx?

Сообщения
134
Реакции
40
Помог
2 раз(а)
Существует ли аналогичная функция - rename_file, только для переименовывания папок?
 
Сообщения
336
Реакции
414
Помог
7 раз(а)
Что бы изменить название каталога нужно использовать функцию rename_file и выставить значение третьего параметра 1
Код:
#include <amxmodx>

new sDir1[] = "addons/amxmodx/configs/plugins/test1";
new sDir2[] = "addons/amxmodx/configs/plugins/test2";

public plugin_init() {
    register_plugin("Test", "0.0.1", "Albertio");

    rename_file(sDir1, sDir2, 1);
}
 
Сообщения
336
Реакции
414
Помог
7 раз(а)
Code_0xABC, я когда в 2 часа ночи сел пилить сток, даже не подумал проверить эту функцию. Думал, раз автор топика написал такую тему, он проверял и она не работает. Нарушил свое же правило, которое гласит "всегда подвергай сомнению чужие слова". Вот и поплатился 2 часами написания ублюдского кода))

Код:
stock rename_dir(szOldDirPath[], const szNewDirPath[]) {
    if(equal(szOldDirPath, szNewDirPath))
        return 0;

    new hDir, szFileName[64];
    
    hDir = open_dir(szOldDirPath, szFileName, charsmax(szFileName));

    if(!hDir)
        return 0;

    enum _:FileData {
        FileName[128],
        FileLine[256]
    };

    new Array:eFileData = ArrayCreate(FileData), eTempFileData[FileData];

    new hFile, szFilePath[128], szLine[256];

    while(next_file(hDir, szFileName, charsmax(szFileName)) == 1) {
        if(szFileName[0] == '.')
            continue;

        formatex(szFilePath, charsmax(szFilePath), "%s/%s", szOldDirPath, szFileName);

        if(!(hFile = fopen(szFilePath, "rt")))
            continue;

        while(!feof(hFile)) {
            fgets(hFile, szLine, charsmax(szLine));
            trim(szLine);

            formatex(eTempFileData[FileName], charsmax(eTempFileData[FileName]), "%s/%s", szNewDirPath, szFileName);
            formatex(eTempFileData[FileLine], charsmax(eTempFileData[FileLine]), szLine);

            ArrayPushArray(eFileData, eTempFileData);
        }

        fclose(hFile);

        delete_file(szFilePath);
    }

    close_dir(hDir);

    rmdir(szOldDirPath);
    mkdir(szNewDirPath);

    new iFileCount = ArraySize(eFileData);

    for(new i; i < iFileCount; i++) {
        ArrayGetArray(eFileData, i, eTempFileData);
        write_file(eTempFileData[FileName], eTempFileData[FileLine]);
    }

    ArrayDestroy(eFileData);

    return 1;
}
 
Сообщения
1,082
Реакции
58
Помог
11 раз(а)
Albertio, дружище, так натив rename_file меняет же имя файла, а сток можно твой реализовать, только учесть что там может быть не один фаил
 
Последнее редактирование:
Сообщения
134
Реакции
40
Помог
2 раз(а)
Albertio, перед написанием поста я проверял эту функцию, конкретно для файлов с расширением, всё делал идентично тому, как у тебя в первом посте и все работало, но для папок не вышло и я решил, что для работы с каталогом такой вариант не подходит, поэтому обратился сюда. может я просто где-то накосячил, например в пути к файлу. сейчас еще раз все перепроверю.
 
Сообщения
134
Реакции
40
Помог
2 раз(а)
Albertio, да, я клоун. была непростительная ошибка с моей стороны. я сделал вызов функции от консольной команды. и проверяя это ночью, затупил и не перезагрузил карту, после замены плагина с внесенными изменениями. то есть консольная команда отрабатывала и менялись имена файлов, но что бы менялись еще и папки, нужен был нормальный рестарт. сейчас с первого раза тоже не получилась, уже хотел отписать и потом дошло. извиняюсь за потраченное время...
 

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу