Использование ifstream в VSC++ - C++

The New Guy
Дата: 01.08.2015 20:40:33
Вопрос, хочу поработать с файлом, но программу готовую нужно унести в другое место, поэтому абсолютный адрес для доступа к файлу использовать нельзя. Делаю в вижуал студии, если положить файлы в дебаг и папку проекта, тогда всё работает правильно, если как то иначе, то вылезает или один ноль на консоль, или бесконечное количество нулей. Нужно чтобы все файлы лежали в одном месте в двух хранить не вариант. вот код:

#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;
}
П.С.М.
Дата: 01.08.2015 22:55:36
The New Guy
Вопрос, хочу поработать с файлом, но программу готовую нужно унести в другое место, поэтому абсолютный адрес для доступа к файлу использовать нельзя

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

PS: и (как минимум) уберите дублирующиеся инклуды, добавьте проверку существования файла.