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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтения файлов из подпапок папки 
:(
    Опции темы
Jeka22
Дата 6.8.2010, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте, у меня возникла проблема, в Си я не грамотный, но очень прошу умельцев чтобы помогли, как сделать чтоб в этом коде он читал файлы не только  из папок, но его и подпапок.
Код

void DllInit()
{
    {
        GetModuleFileName(NULL, cSelfPath, MAX_PATH);
        if (strrchr(cSelfPath, '\\')) *(char*)(strrchr(cSelfPath, '\\') + 1) = '\0';

        char cFilePath[MAX_PATH];
        strcpy_s(cFilePath, MAX_PATH, cSelfPath);
        strcat_s(cFilePath, MAX_PATH, "virtualimg.dat");
        FILE* pFile;
        if (fopen_s(&pFile, cFilePath, "r"))
        {
            MessageBox(0, "Failed to open virtualimg.dat.", "Virtual IMG", MB_OK | MB_ICONERROR);
            ExitProcess(0);
        }
        char cType[16];
        int iType;
        char cIMGPath[MAX_PATH];
        char cDirPath[MAX_PATH];
        while (fscanf_s(pFile, "%s\t%s\t%s", cType, 16, cIMGPath, MAX_PATH, cDirPath, MAX_PATH) == 3 )
        {
            iType = 0;
            if (!_stricmp(cType, "MARGE")) iType = 1;
            if (!_stricmp(cType, "CREATE")) iType = 2;
            if (!_stricmp(cType, "ADD")) iType = 3;
            if (!_stricmp(cType, "#")) continue;
            pVirtualIMG = (VirtualIMG*)realloc(pVirtualIMG, sizeof(VirtualIMG) * (iIMGCount + 1));        
            pVirtualIMG[iIMGCount].iType = iType;
            strcpy_s(pVirtualIMG[iIMGCount].cIMGPath, MAX_PATH, cIMGPath);
            strcpy_s(pVirtualIMG[iIMGCount].cDirPath, MAX_PATH, cDirPath);

            pVirtualIMG[iIMGCount].hIMGFile = 0;
            pVirtualIMG[iIMGCount].hNewFile = 0;
            pVirtualIMG[iIMGCount].iIMGFile = 0;
            pVirtualIMG[iIMGCount].cIMGFile = NULL;
            if (!pVirtualIMG[iIMGCount].iType) continue;
            strcpy_s(cIMGPath, MAX_PATH, cSelfPath);
            strcat_s(cIMGPath, MAX_PATH, pVirtualIMG[iIMGCount].cIMGPath);
            strcpy_s(cFilePath, MAX_PATH, cIMGPath);
            strcat_s(cFilePath, MAX_PATH, ".vimg");
            pVirtualIMG[iIMGCount].hIMGFile = CreateFile(cIMGPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS, NULL);
            HANDLE hNewIMG;

            HANDLE hFind;
            WIN32_FIND_DATA ffd;
            unsigned long dwCurrentFile = 0x00800000;
            unsigned long dwVersion;
            unsigned long dwFileNum;
            unsigned long dwBuffer[8];
            unsigned long dwSize;
            unsigned long dwIMGFile;
            hNewIMG = CreateFile(cFilePath, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_FLAG_RANDOM_ACCESS, NULL);
            ReadFile(pVirtualIMG[iIMGCount].hIMGFile, &dwVersion, 0x4, &dwSize, NULL);
            WriteFile(hNewIMG, &dwVersion, 0x4, &dwSize, NULL);
            dwFileNum = 0;
            WriteFile(hNewIMG, &dwFileNum, 0x4, &dwSize, NULL);
            strcpy_s(cDirPath, MAX_PATH, cSelfPath);
            strcat_s(cDirPath, MAX_PATH, pVirtualIMG[iIMGCount].cDirPath);
            strcat_s(cDirPath, MAX_PATH, "*");
            pVirtualIMG[iIMGCount].iIMGFile = 0;
            
            hFind = FindFirstFile(cDirPath, &ffd);
            while (FindNextFile(hFind,&ffd)!=0)
            {    
                if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                {
                    if (!FindNextFile(hFind, &ffd)) break;
                    continue;
                }
                dwBuffer[0] = dwCurrentFile;
                dwBuffer[1] = (ffd.nFileSizeLow >> 11 | ffd.nFileSizeHigh << 21) + 1;
                ZeroMemory(&dwBuffer[2], 0x18);
                strcpy_s((char*)&dwBuffer[2], 0x18, strrchr(ffd.cFileName, '\\') ? strrchr(ffd.cFileName, '\\') + 1 : ffd.cFileName);
                WriteFile(hNewIMG, dwBuffer, 0x20, &dwSize, NULL);
                pVirtualIMG[iIMGCount].cIMGFile =(char*)realloc(pVirtualIMG[iIMGCount].cIMGFile, MAX_PATH * (pVirtualIMG[iIMGCount].iIMGFile + 1));
                strcpy_s(&pVirtualIMG[iIMGCount].cIMGFile[MAX_PATH * pVirtualIMG[iIMGCount].iIMGFile], MAX_PATH, cSelfPath);
                strcat_s(&pVirtualIMG[iIMGCount].cIMGFile[MAX_PATH * pVirtualIMG[iIMGCount].iIMGFile], MAX_PATH, pVirtualIMG[iIMGCount].cDirPath);
                strcat_s(&pVirtualIMG[iIMGCount].cIMGFile[MAX_PATH * pVirtualIMG[iIMGCount].iIMGFile], MAX_PATH, ffd.cFileName);
                pVirtualIMG[iIMGCount].iIMGFile++;
                dwFileNum++;
                dwCurrentFile++;
            }
            FindClose(hFind);
            switch (pVirtualIMG[iIMGCount].iType)
            {
            case 1:
                {
                    ReadFile(pVirtualIMG[iIMGCount].hIMGFile, &dwIMGFile, 0x4, &dwSize, NULL);
                    for (unsigned long i = 0; i < dwIMGFile; i++)
                    {
                        ReadFile(pVirtualIMG[iIMGCount].hIMGFile, dwBuffer, 0x20, &dwSize, NULL);
                        for (int j = 0; j < pVirtualIMG[iIMGCount].iIMGFile; j++) if (!_stricmp((const char*)&dwBuffer[2], (strrchr(&pVirtualIMG[iIMGCount].cIMGFile[MAX_PATH * j], '\\')) ? strrchr(&pVirtualIMG[iIMGCount].cIMGFile[MAX_PATH * j], '\\') + 1 : &pVirtualIMG[iIMGCount].cIMGFile[MAX_PATH * j]))
                        {
                            dwBuffer[1] = 0;
                            break;
                        }
                        if (!dwBuffer[1]) continue;
                        WriteFile(hNewIMG, dwBuffer, 0x20, &dwSize, NULL);
                        dwFileNum++;
                    }
                    break;
                }
            case 2:
                {
                    break;
                }
            case 3:
                {
                    ReadFile(pVirtualIMG[iIMGCount].hIMGFile, &dwIMGFile, 0x4, &dwSize, NULL);
                    for (unsigned long i = 0; i < dwIMGFile; i++)
                    {
                        ReadFile(pVirtualIMG[iIMGCount].hIMGFile, dwBuffer, 0x20, &dwSize, NULL);
                        WriteFile(hNewIMG, dwBuffer, 0x20, &dwSize, NULL);
                        dwFileNum++;
                    }
                    break;
                }
            }

            CloseHandle(pVirtualIMG[iIMGCount].hIMGFile);
            pVirtualIMG[iIMGCount].hIMGFile = CreateFile(cIMGPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED | FILE_FLAG_RANDOM_ACCESS, NULL);
            SetFilePointer(hNewIMG, 0x4, NULL, FILE_BEGIN);
            WriteFile(hNewIMG, &dwFileNum, 0x4, &dwSize, NULL);
            CloseHandle(hNewIMG);
            iIMGCount++;
        }
    }



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


Новичок



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

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



никто нехочет помочь, как правильно сделать рекурсию, пытался переделать не получается. 
Ладно,тему можно удалять.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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