Пожалуйста, прочтите новое правило об ограничении использования AI-инструментов. ×

Блог пользователя brainail

Автор brainail, 14 лет назад, По-русски
Привет, нужно узнать пару функция как их сделать на C++, ну и если не сложно по-подробнее с примерами :o, спасибо!

Что пока что интересует (По мере буду добавлять, спасибо за ответы):
1. Как создать папку где либо, то есть так сказать сделать mkdir?
2. Как вообще перемещаться по папкам, возможно определять все папки что есть в текущей папке. Так сказать строить дерево папок?
3. Как перемещать файл из одного места в другое?
4. Как читать картинку? И вообще как работать с изображениями?
5. Из 4 пункта, как определить размеры файла, то есть высоту и ширину?
6. Какие форматы изображений С++ поддерживает?

Пока всё, спасибо за любые ответы. Особенно хочется что бы это всё делалось как в обычной олимпиадной программе =)

Благодаря MSDN я всё узнал всё что нужно :)
Теперь показываю программу которая рассортировывает картинки внутри папки =)
То есть ложим её в папку с картинками, запускаем, и вот уже созданы специальные папки вида "1280x720", "1600x1200" ... где в каждой такой папке лежат картинки такого разрешения :) Всё написано с помощью си++ и его библиотек =)

#include <string>
#include <atlimage.h>
using namespace std;

CImage image;
WIN32_FIND_DATA ffd;
HANDLE file;
HRESULT readIm;
LPSECURITY_ATTRIBUTES crDir;
char buf[15];

int main() {
 file = FindFirstFile(L"*.*", &ffd);
 do {
  if (!(ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
   image.Destroy();
   readIm = image.Load(ffd.cFileName);
   if(readIm == S_OK) {
    sprintf(buf, "%dx%d", image.GetWidth(), image.GetHeight());
    wstring Rdir(buf, buf+strlen(buf));
    CreateDirectory(Rdir.c_str(), crDir);
    MoveFile(ffd.cFileName, (Rdir + L"\\\\" + ffd.cFileName).c_str());
   } else {
    CreateDirectory(L"!Unknown", crDir);
    MoveFile(ffd.cFileName, (wstring(L"!Unknown\\\\") + ffd.cFileName).c_str());
   }
  }
 } while (FindNextFile(file, &ffd) != 0);
}

Скачать саму Exe можно тут!
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
В С++ афаик нет встроенных средств для подобных вещей - все на system-dependant сторонних библиотеках
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Дело в том, что в самом языке с++ нет привязок ни к файловой системе, ни к графическим форматам. Поэтому все выше перечисленное делается засчет сторонних библиотек, функций операционной системы, либо расширений стандартной библиотеки, реализованных в конкретных компиляторах.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Ясно, спасибо, жалко =)
Но если кто сможет хоть ка как-нибудь с помощью сторонних или как ещё =) буду рад!
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Так для этого тебе в общем случае нужно рассказать, на каких платформах должен работать твой код, какими компиляторами собираться, и какие библиотеки тебе доступны. 
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Microsoft Visual Studio 2008-2009
      Библиотеки что все шли с ней!

      Допустим есть вот такая простая задача.
      В папке лежат файлы.
      Нужно взять все файлы, если файл не картинка, то удаляем, иначе создаём для картинки папку, вида 1280x720, то есть папка будет называться так же как и разрешение картинки, и переместить туда картинку.
      Вообщем отсортировать картинки в папке по разрешению по папкам.
      =)

      На питоне это выглядит так

      from sys import exit
      from os import mkdir, remove, listdir, getcwd
      from os.path import exists, isdir
      from shutil import copy
      from pygame import init, QUIT, quit
      from pygame.image import load
      from pygame.display import set_mode
      from pygame.event import get

      init()
      screen = set_mode((100,20))
      for file in listdir(getcwd()):
          if file[str('.'+file).rindex('.'):] in ["jpg", "jpeg", "bmp", "png"]:
              try:
                  img = load(file).convert()
              except:
                  if not isdir(file): remove(file)
                  continue
          else:
              continue
          dirs = str(img.get_width()) + 'x' + str(img.get_height())
          if exists(dirs) == 0:
              mkdir(dirs)
          copy(file, dirs)
          remove(file)
          for event in get():
              if event.type == QUIT:
                  break
      quit()
      exit(0)



14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
boost.filesystem, boost.gil (jpeg, tiff, png)
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
#include <stdlib.h>

system("mkdir ...")
14 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится
Добавил то чему я научился :)