Вопрос, хочу поработать с файлом, но программу готовую нужно унести в другое место, поэтому абсолютный адрес для доступа к файлу использовать нельзя. Делаю в вижуал студии, если положить файлы в дебаг и папку проекта, тогда всё работает правильно, если как то иначе, то вылезает или один ноль на консоль, или бесконечное количество нулей. Нужно чтобы все файлы лежали в одном месте в двух хранить не вариант. вот код:
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <conio.h>
#include <iostream>
#include <fstream>
#include <string>
#include <conio.h>
#include <cstring>
using namespace std;
unsigned int CRC32_function(unsigned char *buf, unsigned long len)
{
unsigned long crc_table[256];
unsigned long crc;
for (int i = 0; i < 256; i++)
{
crc = i;
for (int j = 0; j < 8; j++)
crc = crc & 1 ? (crc >> 1) ^ 0xEDB88320UL : crc >> 1;
crc_table[i] = crc;
};
crc = 0xFFFFFFFFUL;
while (len--)
crc = crc_table[(crc ^ *buf++) & 0xFF] ^ (crc >> 8);
return crc ^ 0xFFFFFFFFUL;
}
//возвращание конечного CRC32. Достаточно вызвать эту функцию и указать имя файла, для которого будет произведён расчёт
unsigned int CRC32_count(char* filename){
char buf[4096*64]; //сколько символов в файле, на самом деле, это должно быть больше, 2^31-1 будет для файла размером 2ГБ
ifstream f (filename,std::ios::binary);
f.read(buf,4096*64);
return CRC32_function((unsigned char*)buf, f.gcount());
}
int _tmain(int argc, _TCHAR* argv[])
{
std::fstream fin;
std::string buf;
fin.open("files.txt");
while(!fin.eof()) {
std::getline(fin, buf);
char *chrstr=new char[buf.length()+1];
strcpy(chrstr, buf.c_str());
int len=CRC32_count(chrstr);
std::cout<<len;
}
_getch();
return 0;
}