Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Создание файлового менеджера 
:(
    Опции темы
_Invisible
Дата 7.8.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Вообщем, решил вот занятся написанием файлового менеджера, опыт маленький, раньше писал на Дельфи, решил перейти на С++. Вообщем, появились такие вопросы:
1.Существует функция поиска файлов, в ней есть 2 параметра, 1й-это путь, 2й-это массив структур куда будут заносится данные. Я пытался передать указатель на массив в функцию, но всё равно в массив не заносится абсолютно никаких данных. Как это исправить?
2.Пытался конвертировать FileTime в SystemTime. Конвертировал. Но как оттуда выделить часы, секунды и т.п. В Си было проще, смещал на нужное кол-во и всё. А сдесь даже не знаю как.
PM MAIL ICQ   Вверх
_hunter
Дата 7.8.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Цитата(_Invisible @  7.8.2007,  16:36 Найти цитируемый пост)
Я пытался передать указатель на массив в функцию, но всё равно в массив не заносится абсолютно никаких данных. Как это исправить?

исправить это очень просто: нужо всего лиш написать код, заносящий данные в переданный массив.

Цитата(_Invisible @  7.8.2007,  16:36 Найти цитируемый пост)
 А сдесь даже не знаю как. 

а сдесь все совсем просто: просто смотри на члены полученной структуры.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
_Invisible
Дата 7.8.2007, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Не хочет работать :(
Код

bool Search(char path[]){  //Поиск файлов
    HANDLE hFile;
    WIN32_FIND_DATA winFindData;
    int i=0;
    LPSYSTEMTIME SysTime;

    hFile=FindFirstFile(path,&winFindData);
    if (hFile!=INVALID_HANDLE_VALUE){
        do{
            memcpy(FileInfo[i].Name,winFindData.cFileName,13);
            FileInfo[i].Attr=winFindData.dwFileAttributes;
            FileInfo[i].Size=winFindData.nFileSizeLow;
            FileTimeToSystemTime(&winFindData.ftLastWriteTime,SysTime);
            FileInfo[i].Day=SysTime.wDay;
            FileInfo[i].Month=SysTime.wMonth;
            FileInfo[i].Year=SysTime.wYear;
            FileInfo[i].Hour=SysTime.wHour;
            FileInfo[i].Min=SysTime.wMinute;
            FileInfo[i].Sec=SysTime.wSecond;
            i++;
            printf("%s\t",winFindData.cFileName);
           
            
        }while(FindNextFile(hFile,&winFindData)!=0);
    }
FindClose(hFile);

return true;
};



Это сообщение отредактировал(а) _Invisible - 7.8.2007, 20:15
PM MAIL ICQ   Вверх
Pentium02
Дата 8.8.2007, 09:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 175
Регистрация: 29.4.2006
Где: Россия

Репутация: нет
Всего: 1



Функция поиска 

Код

void ListFileDir(char* Path, TListItems* FileList)
{
    TSearchRec SR;
    if (FindFirst(Path, faAnyFile, SR) == 0)
    {
        while (FindNext(SR) == 0)
        {
            if (SR.Attr != faDirectory)
                {
                    TListItem* li = FileList->Add();
                    li->Caption = SR.Name;
                }

        }
    FindClose(SR);
    }
}


Это сообщение отредактировал(а) Pentium02 - 8.8.2007, 09:29
PM MAIL WWW ICQ   Вверх
_hunter
Дата 8.8.2007, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Цитата(_Invisible @  7.8.2007,  20:15 Найти цитируемый пост)
Не хочет работать 

и в чем это выражается?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
_Invisible
Дата 8.8.2007, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Дело в том что, я конвертирую в LPSYSTEMTIME, нормально конвентируется, но она не имеет структуры :( 
PM MAIL ICQ   Вверх
_hunter
Дата 8.8.2007, 11:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



русским же языком говорил:
http://forum.vingrad.ru/index.php?showtopi...t&p=1217766
не в LPSYSTEMTIME конвертируй (раз уж не знаеш что такое указатели и как с ними работать) а в SYSTEMTIME...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
_Invisible
Дата 8.8.2007, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Ну я так уже пробовал, но ошибка:
Код

FileTimeToSystemTime(winFindData.ftLastWriteTime,&SysTime);

error C2664: 'FileTimeToSystemTime' : cannot convert parameter 1 from 'FILETIME' to 'const FILETIME *'

PM MAIL ICQ   Вверх
586
Дата 8.8.2007, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



FileTimeToSystemTime(&winFindData.ftLastWriteTime,&SysTime);
PM   Вверх
_Invisible
Дата 8.8.2007, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Цитата(586 @ 8.8.2007,  14:29)
FileTimeToSystemTime(&winFindData.ftLastWriteTime,&SysTime);

Та я уже и так делал. Но, вместо чисел выдаёт один нули:(
PM MAIL ICQ   Вверх
_hunter
Дата 8.8.2007, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



а в winFindData.ftLastWriteTime что?
и посмотри что FileTimeToSystemTime возвращает...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
586
Дата 8.8.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Код
bool Search(char *path){  
    HANDLE hFile;
    WIN32_FIND_DATA winFindData;
    int i=0;
    SYSTEMTIME st;

    hFile=FindFirstFile(path,&winFindData);
    if (hFile==INVALID_HANDLE_VALUE) return false;
    do{
        /*memcpy(FileInfo[i].Name,winFindData.cFileName,13);
        FileInfo[i].Attr=winFindData.dwFileAttributes;
        FileInfo[i].Size=winFindData.nFileSizeLow;
        FileTimeToSystemTime(&winFindData.ftLastWriteTime,SysTime);
        FileInfo[i].Day=SysTime.wDay;
        FileInfo[i].Month=SysTime.wMonth;
        FileInfo[i].Year=SysTime.wYear;
        FileInfo[i].Hour=SysTime.wHour;
        FileInfo[i].Min=SysTime.wMinute;
        FileInfo[i].Sec=SysTime.wSecond;
        i++;
        printf("%s\t",winFindData.cFileName); */

        FileTimeToSystemTime(&winFindData.ftLastWriteTime, &st);
        printf("%2d:%.2d:%.2d %2d.%.2d.%.4d\t%s\n", st.wHour, st.wMinute, st.wSecond,
            st.wDay, st.wMonth, st.wYear, winFindData.cFileName);


    }while(FindNextFile(hFile,&winFindData)!=0);
    FindClose(hFile);

    return true;
};

int main(int argc, char* argv[])
{
    Search("E:\\*.*");
    system("pause");
    return 0;
}

PM   Вверх
_Invisible
Дата 8.8.2007, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



To586: Да да, у меня точно также, всё работает. Но, когда пытаешься сделать 
Код

FileInfo[i].day=st.wDay;
 то в FileInfo[i].day заносится значение "0". Пытался через memcpy, ничего не получается :(
PM MAIL ICQ   Вверх
586
Дата 8.8.2007, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



_Invisible, выложи весь код, я гадать не буду. Что такое FileInfo. Вектор? Массив? Где выделение памяти, ведь количество элементов (i) заранее не известно. Выложи весь код.
PM   Вверх
_Invisible
Дата 8.8.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Код

#include <iostream.h>
#include <windows.h>
#include <stdio.h>
#include <memory.h>
#include <russian.h>

struct SFileInfo{
    TCHAR              Name[MAX_PATH]; //Имя
    DWORD             Attr;                    //Атрибут
    DWORD             Size;                    //Размер
    WORD               Hour,Min,Sec,Day,Month,Year; //Дата/Время
}FileInfo[MAX_PATH];

struct SDrive{
    char Name;
    char Type[MAX_PATH];
}Drives[25];


bool Search(char path[]){  //Поиск файлов
    HANDLE hFile;
    WIN32_FIND_DATA winFindData;
    int i=0;
    SYSTEMTIME SysTime;

    hFile=FindFirstFile(path,&winFindData);
    if (hFile!=INVALID_HANDLE_VALUE){
        do{
            memcpy(FileInfo[i].Name,winFindData.cFileName,13);
            FileInfo[i].Attr=winFindData.dwFileAttributes;
            FileInfo[i].Size=winFindData.nFileSizeLow;
            FileTimeToSystemTime(&winFindData.ftCreationTime,&SysTime);
            FileInfo[i].Day=SysTime.wDay; //пробовал с помощью memcpy, не получилось :(
            FileInfo[i].Month=SysTime.wMonth;
            FileInfo[i].Year=SysTime.wYear;
            FileInfo[i].Hour=SysTime.wHour;
            FileInfo[i].Min=SysTime.wMinute;
            FileInfo[i].Sec=SysTime.wSecond;
            i++;
            printf("%s\t",winFindData.cFileName);
            printf("%d/%d/%d\n",SysTime.wDay,FileInfo[i].Hour,FileInfo[i].Year);
            
        }while(FindNextFile(hFile,&winFindData)!=0);
    }
FindClose(hFile);

return true;
};

int GetDrives(){
UINT type;    
char temp[]="A:\\";
int i=0;
int name;
    for(name=60; name<=90; name++){
        temp[0]=(char)name;
        type=GetDriveType(temp);
        if (type!=DRIVE_NO_ROOT_DIR){
            Drives[i].Name=name;
            
            switch(type){
                case DRIVE_UNKNOWN   : memcpy(Drives[i].Type,"Unknown",8); break;
                case DRIVE_REMOVABLE : memcpy(Drives[i].Type,"Fixed",6); break;
                case DRIVE_REMOTE      : memcpy(Drives[i].Type,"Network",8); break;
                case DRIVE_CDROM       : memcpy(Drives[i].Type,"CD-ROM",7); break;
                case DRIVE_RAMDISK     : memcpy(Drives[i].Type,"RAM",4); break;
                
            }
            cout << Drives[i].Name <<"\t";
            cout << Drives[i].Type <<endl;
            i++;
        }
    }
return i;
}


int main(int argc,char *argv[]){
    Search("C:\\windows\\*.*");
GetDrives();
    return 0;
};



Это сообщение отредактировал(а) _Invisible - 8.8.2007, 22:09
PM MAIL ICQ   Вверх
586
Дата 8.8.2007, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 10
Всего: 146



Цитата(_Invisible @  8.8.2007,  23:08 Найти цитируемый пост)
FileInfo[MAX_PATH];

Цитата(_Invisible @  8.8.2007,  23:08 Найти цитируемый пост)
Search("C:\\windows\\*.*");

MAX_PATH = 260
используй динамический массив
Цитата(_Invisible @  8.8.2007,  23:08 Найти цитируемый пост)
          memcpy(FileInfo[i].Name,winFindData.cFileName,13);
            FileInfo[i].Attr=winFindData.dwFileAttributes;
            FileInfo[i].Size=winFindData.nFileSizeLow;
            FileTimeToSystemTime(&winFindData.ftCreationTime,&SysTime);
            FileInfo[i].Day=SysTime.wDay; //пробовал с помощью memcpy, не получилось :(
            FileInfo[i].Month=SysTime.wMonth;
            FileInfo[i].Year=SysTime.wYear;
            FileInfo[i].Hour=SysTime.wHour;
            FileInfo[i].Min=SysTime.wMinute;
            FileInfo[i].Sec=SysTime.wSecond;
            i++;  // !!!!!!!
            printf("%s\t",winFindData.cFileName);
            printf("%d/%d/%d\n",SysTime.wDay,FileInfo[i].Hour,FileInfo[i].Year);//эти поля не заполнены


PM   Вверх
_Invisible
Дата 9.8.2007, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 3.8.2007

Репутация: нет
Всего: нет



Вообщем, я описал динамический массив:
Код

int *FileInfo = new int[size];

Но теперь как его описать как структуру? Все мои попытки не увенчались успехом :(
PM MAIL ICQ   Вверх
_hunter
Дата 9.8.2007, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



Цитата(_Invisible @  9.8.2007,  14:53 Найти цитируемый пост)
как его описать как структуру

его структуру ты ужу описал:
Цитата(_Invisible @  9.8.2007,  14:53 Найти цитируемый пост)
int *

т.е. массив интов.

ты, может, книжки какие-нить по плюсам почитай перед тем как переходить на что-то "сурьезное"...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1915 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.