Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.09.2010, 12:03   #1
Pirr
Пользователь
 
Регистрация: 23.06.2009
Сообщений: 13
Вопрос Первая программа. Копирование файлов.

Здравствуйте!
Только, только начал изучать С++, прочитал несколько книг, попробовал примеры, все вроде ОК.
Решил написать простенькую программку, копирование файлов из одной директории в другую. И сразу засада... не могу нигде найти информации о том как просканировать заданную директорию и найти в ней все файлы, и как получить атрибуты файлов, например дату создания.
Плюс хотелось бы получить кроссплатформенный код.

Код:
#include <iostream>

using namespace std;

int main()
{
    char source[256] = "~/111/"; //Источник
    char receiver[256] = "~/222/"; //Приемник

    //Сканируем источник и заносим имена файлов в массив source_dir[]
    //Перебираем массив source_dir[] и ищем файлы в приемнике
    //если такого файла нет то копируем его в приемник
    //иначе сравниваем дату создания файла, и если файл
    //в источнике более новый то перезаписываем его
    //иначе пропускаем

    return 0;
}

Последний раз редактировалось Pirr; 15.09.2010 в 12:15.
Pirr вне форума Ответить с цитированием
Старый 15.09.2010, 12:16   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Там же внизу ссылки на проболжения функций FindXXXFile
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2010, 12:23   #3
Pirr
Пользователь
 
Регистрация: 23.06.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
Там же внизу ссылки на проболжения функций FindXXXFile
Что то подобное я находил в одном из справочников, но... это ведь только для windows платформы... а разве нет подобной кроссплатформенной функции?
Pirr вне форума Ответить с цитированием
Старый 15.09.2010, 12:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а разве нет подобной кроссплатформенной функции?
Я Дельфиец. Я Сишные библиотеки плохо знаю
Может и есть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.09.2010, 13:34   #5
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

В стандартном C++ функций для работы с файловой системой и директориями нет. Так что придется использовать либо API конкретной платформы (или еще какие платформозависимые внешние средства), либо кроссплатформенную библиотеку (например, Qt).
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 15.09.2010, 13:43   #6
Pirr
Пользователь
 
Регистрация: 23.06.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
В стандартном C++ функций для работы с файловой системой и директориями нет. Так что придется использовать либо API конкретной платформы (или еще какие платформозависимые внешние средства), либо кроссплатформенную библиотеку (например, Qt).
Мда... безрадостно
Не ожидал на такие грабли наступить... до этого делал подобную программку на tcl/tk и newLisp, там таких проблем не было, обычно все укладывалось в 5-10 строк кода.

Вот нашел вроде подходящий примерчик, но он не компилируется... может кто нибудь пояснить его?

Код:
#define _SVID_SOURCE
       /* print files in current directory in reverse order */
       #include <dirent.h>

       int
       main(void)
       {
           struct dirent **namelist;
           int n;

           n = scandir(".", &namelist, 0, alphasort);
           if (n < 0)
               perror("scandir");
           else {
               while (n--) {
                   printf("%s\n", namelist[n]->d_name);
                   free(namelist[n]);
               }
               free(namelist);
           }
       }

Последний раз редактировалось Stilet; 16.09.2010 в 07:27.
Pirr вне форума Ответить с цитированием
Старый 16.09.2010, 00:29   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

все он компилится
Код:
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>

int main()
{
   struct dirent **namelist;
   int n;

   n = scandir(".", &namelist, 0, alphasort);
   if (n < 0)
	   perror("scandir");
   else {
	   while (n--) {
		   printf("%s\n", namelist[n]->d_name);
		   free(namelist[n]);
	   }
	   free(namelist);
   }
   return 0;
}
а пояснять тут нечего. man scandir. пример кстати оттуда же
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 16.09.2010 в 00:34.
pproger вне форума Ответить с цитированием
Старый 16.09.2010, 07:09   #8
Pirr
Пользователь
 
Регистрация: 23.06.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от pproger Посмотреть сообщение
все он компилится

а пояснять тут нечего. man scandir. пример кстати оттуда же
Спасибо, огромное!
Оказывается заголовочных файлов не хватало, что то подобное я и предполагал, но не знал каких именно. А пример действительно из man справки взял, на одном из форумов ссылались на эту функцию. По моему это как раз то что мне нужно.
Pirr вне форума Ответить с цитированием
Старый 16.09.2010, 07:31   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

эм... А извиняюсь кроссплатформенность тут где?
Причем я имею ввиду именно исходник.
Лично моя VS говорит что dirent.h не найден. Значит этот код только для Линукса подходит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.09.2010, 08:42   #10
Pirr
Пользователь
 
Регистрация: 23.06.2009
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
эм... А извиняюсь кроссплатформенность тут где?
Причем я имею ввиду именно исходник.
Лично моя VS говорит что dirent.h не найден. Значит этот код только для Линукса подходит?
Да, действительно в VS не работает, но может этот файл в gcc входит и с этим компилятором соберется?
Мне не верится что нет стандартных кроссплатформенных функций для чтения директорий, ведь есть куча софта который одинаково компилируется на любой платформе.
Pirr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Моя первая программа. fragment Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 11.05.2010 11:46
Первая программа на WINAPI Syltan Win Api 8 27.02.2010 22:38
Первая программа, C++ Bulder edmynt Помощь студентам 2 31.01.2010 15:12
Моя первая программа)) Dr.Badnezz Софт 9 06.12.2008 14:39
Моя первая программа NikLik Софт 4 20.07.2008 00:24