2013-11-10 2 views
-4

поэтому у меня есть этот код для проверки CRC файла с именем map.spak и сравнить результат с моим указанным Crc результатом, хранящийся в переменном «сравнить»сделать некоторый Crc кода проверки, петлю для нескольких файлов (C++)

int main(int iArg, char *sArg[]) 
{ 
    char sSourceFile[MAX_PATH]; 

    memset(sSourceFile, 0, sizeof(sSourceFile)); 

    CCRC32 crc32; 
    crc32.Initialize(); //Only have to do this once. 

    unsigned int iCRC = 0; 
    strcpy(sSourceFile, "map.spak"); 
    int compare = 399857339; 

    ifstream checkfile(sSourceFile); 
    if (checkfile){ 
     cout << "Checking file " << sSourceFile << "..." << endl; 
     crc32.FileCRC(sSourceFile, &iCRC); 

     if(iCRC == compare){ 
      cout << "File " << sSourceFile << " complete!\nCRC Result: " << iCRC << endl; 
     }else{ 
      cout << "File " << sSourceFile << " incomplete!\nCRC Result: " << iCRC << endl; 
     } 
    }else{ 
     cout << "File not found!" << endl; 
    } 

    system("pause"); 

    return 0; 
} 

и теперь я хочу, чтобы сделать этот код для нескольких файлов скажем, список имен файлов хранится в filelist.txt

структура filelist.txt:

id|filename|specified crc 
1|map.spak|399857339 
2|monster.spak|274394072 

как сделать Crc чек, петля для каждого имени файла

Я не очень хорошо на C++ я знаю только некоторый алгоритм, потому что я знаю PHP

C++ слишком сложен

это полный источник включен источник CRC Source Code

или Pastebin

TestApp.cpp link

+0

Я предполагаю, что если вы хотите читать из текстового файла, попробуйте 'fstream'. –

+0

@remyabel да, сэр, но как зацикливать проверку crc .. –

+0

Прочитайте имена файлов в вектор или массив. –

ответ

0

Я внесла несколько изменений в ваш код. Я удалил заголовки защиты, так как мы используем его только в файлах заголовков. Метка old-fasioned была заменена операцией на строках. Я подозреваю, что вам необходимо передать char* объекту CCRC32, следовательно sSourceFile все еще const char*. Я скомпилировал код, кроме частей с CCRC32.

#include <iostream> 
#include <fstream> 
#include <string> 
#include <vector> 
#include "../CCRC32.H" 

int main(int iArg, char *sArg[]) 
{ 
    std::vector<std::string> filenames; 
    // TODO - populate filesnames (paths?) 

    CCRC32 crc32; 
    crc32.Initialize(); //Only have to do this once. 

    for (unsigned int i = 0; i < filenames.size(); i++) { 
    const char* sSourceFile = filenames[i].c_str(); 

    unsigned int iCRC = 0; 
    int compare = 399857339; // TODO - you need to change this since you are checking several files 

    std::ifstream checkfile(sSourceFile); 
    if (checkfile) { 

     std::cout << "Checking file " << sSourceFile << "..." << std::endl; 
     crc32.FileCRC(sSourceFile, &iCRC); 

     if(iCRC == compare){ 
     std::cout << "File " << sSourceFile << " complete!\nCRC Result: " << iCRC << std::endl; 
     } else { 
     std::cout << "File " << sSourceFile << " incomplete!\nCRC Result: " << iCRC << std::endl; 
     } 
    } else { 
     std::cout << "File tidak ditemukan!" << std::endl; 
    } 
    } 

    return 0; 
} 
+0

ok спасибо, сэр, я постараюсь узнать открытый файл и сохранить данные в вектор .. –