-4

所以我有这段代码用于检查名为 map.spak 的 crc 文件,并将结果与​​存储在变量“compare”中的指定 crc 结果进行比较

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的完整源代码

或粘贴箱

TestApp.cpp链接

4

1 回答 1

0

我对您的代码进行了几处更改。我删除了保护头,因为我们只在头文件中使用它。老式的 memset 已被字符串操作所取代。我怀疑您需要传递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;
}
于 2013-11-10T13:28:47.747 回答