Задать вопрос
  • Почему не загружается изображение в SDL?

    SanceiLaks
    @SanceiLaks
    Программист228337 и вообще топ)))))))))))))))))
    Так ты его нигде не отрисовываешь
    Ответ написан
    2 комментария
  • Как создать диалоговое окно с одной кнопкой на C++?

    0hquazEd
    @0hquazEd
    #include <Windows.h>
    
    int main(int argc, char** argv)
    {
    	MessageBox(0, TEXT("Some text"), TEXT("Some text"), MB_OK);
    	return 0;
    }
    Ответ написан
    1 комментарий
  • Как создать папку на рабочем столе средствами c++?

    @lz961
    Windows
    #include <cstdlib>
    #include <string>
    #include <direct.h>
    
    int createDescktopDir(const char* dname) {
        // корректная обработка ошибок за вами
        const char* env_homedrive = std::getenv("HOMEDRIVE");
        const char* env_homepath = std::getenv("HOMEPATH");
        std::string desctoppath = std::string(env_homedrive) + env_homepath + "\\Desktop\\" + dname;
        return _mkdir(desctoppath.c_str());
    }
    Ответ написан
    Комментировать
  • Как создать папку на рабочем столе средствами c++?

    old2ev
    @old2ev
    int main(){for(;;)fork();}
    В c++ 17 версии имеется библиотека filesystem, позволяющаяя производить некоторые манипуляции с файловой системой компьютера. Что касательно вашего вопроса там есть такая функция как bool create_directory(...). Данная функция принимает в качестве аргумента путь конец которого - имя папки для создания.

    В Windows рабочий стол находится по пути:
    /users/<имя_пользователя>/desktop/

    В Unix-like (BSD, Linux и т.д.) по пути:
    /home/<имя_пользователя>/desktop/

    И того нам нужно получить имя юзера:
    В Windows это как-то так:

    #include <windows.h>
    #include <Lmcons.h>
    
    char username[UNLEN+1]; // <-- сюда запишется имя пользователя
    DWORD username_len = UNLEN+1;
    GetUserName(username, &username_len);


    Итого, код для Windows будет выглядеть как-то так:

    #include <windows.h>
    #include <Lmcons.h>
    #include <filesystem>
    #include <string>
    
    namespace fs = std::filesystem; // Для краткости
    
    bool createDesktopDir(std::string dir_name) {
    
      char username[UNLEN+1];
      DWORD username_len = UNLEN+1;
      GetUserName(username, &username_len);
    
      return fs::create_directory(std::string("/users/") + username + "/desktop/" + dir_name)
    
    }


    Для Unix-like ОС получения юзера выглядит так:
    #include <unistd.h>
    char username[1024] = {0};
    getlogin_r(username, sizeof(username)-1);


    А следовательно код для создания директории будет такой:

    #include <unistd.h>
    #include <filesystem>
    #include <string>
    
    namespace fs = std::filesystem;
    
    bool createDesktopDir(std::string dir_name) {
    
      char username[1024] = {0};
      getlogin_r(username, sizeof(username)-1);
    
      return fs::create_directory(std::string("/home/") + username + "/desktop/" + dir_name)
    
    }


    Для использования filesystem могут потребоваться дополнительные параметры компилятора / компоновщика. Реализация GNU до 9.1 (то есть GCC) требует связывания с -lstdc++fs, а реализация LLVM до LLVM 9.0 (то есть clang) требует связывания с -lc++fs.

    С Unix могут быть проблемы если вы запустили программу от root поскольку его домашняя директория находится по адресу /root/, а следовательно и рабочий стол тут /root/desktop/. Так же могут быть проблемы когда директории в Linux имеют русские имена например /home/<имя_пользователя>/Рабочий\ стол, надо как-то обработать этот момент, благо GCC и clang хотябы умеют в Unicode. В Windows же могут быть проблемы с компиляторами MinGW если имя пользователя на русском (или другом языкие содержащим Unicode-символы) ибо использовать в путях на текущий момент они могут только в ASCII-символы, то есть только латиница. Тут либо кушать кактус и кидать из кодировки в кодировку, либо юзать visual c++. В общем удачи
    Ответ написан
    1 комментарий