Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
The New Guy
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 6
01.08.2015, 20:33     Использование ifstream в VSC++ #1
Вопрос, хочу поработать с файлом, но программу готовую нужно унести в другое место, поэтому абсолютный адрес для доступа к файлу использовать нельзя. Делаю в вижуал студии, если положить файлы в дебаг и папку проекта, тогда всё работает правильно, если как то иначе, то вылезает или один ноль на консоль, или бесконечное количество нулей. Нужно чтобы все файлы лежали в одном месте в двух хранить не вариант. вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.08.2015, 20:33     Использование ifstream в VSC++
Посмотрите здесь:

Объект ifstream!!! C++
C++ Объект ifstream!!!
C++ fstream ifstream
C++ VSC++ и DLL
C++ ifstream
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11845 / 6824 / 771
Регистрация: 27.09.2012
Сообщений: 16,919
Записей в блоге: 2
Завершенные тесты: 1
01.08.2015, 21:09     Использование ifstream в VSC++ #2
В смысле второй файл не открывается?

И нахрена все эти манипуляции со строками? Я имею ввиду, сначала в string, потом в динамическую память копируете, которую потом же и не освобождаете.
The New Guy
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 6
01.08.2015, 21:31  [ТС]     Использование ifstream в VSC++ #3
Ну всё это только первоначальная часть хитрой программы. Мне надо обработать массив файлов, я открываю files.txt в котором лежит список файлов для которых я буду искать контрольную сумму CRC32, тип там можно наверно действительно заменить на string уже, это осталась в наследие конструкция от прошлого варианта которая должна была это значение отправлять в OpenFile. Вообще делаю вот такое Задан набор бинарных файлов. Разработать на C++ компонент, который фиксирует начальное состояние этих файлов и позволяет обнаружить факт любых изменений в их содержимом (детализация изменений не требуется, необходимо только обнаружить, что изменения имели место с указанием списка изменившихся файлов).

Предполагается, что компонент будет представлять собой небольшое количество исходных текстов на C++ ,использовать Win32 API и, возможно, библиотеки ATL, STL, boost и т.д.

План был такой:
1)проверяем есть ли файл checksums.txt
2)если нет то это 1-ый пуск, открываем файл files.txt читаем из него файлы, считаем хэши, создаем файл checksums.txt записываем посчитанные хэши и выходим
3)если есть то открываем files.txt читаем список файлов, открываем checksums.txt, читаем список старых хэшей, рассчитываем новые хэши, получаем массив если какой-то изменился говорим это
lss
919 / 849 / 281
Регистрация: 10.10.2012
Сообщений: 2,701
01.08.2015, 22:11     Использование ifstream в VSC++ #4
Цитата Сообщение от The New Guy Посмотреть сообщение
Нужно чтобы все файлы лежали в одном месте в двух хранить не вариант. вот код:
Запускай единообразно тогда: или из среды, тогда файлы должны быть в папке проекта, или сам .exe, тогда файлы должны быть рядом с .exe.
The New Guy
0 / 0 / 0
Регистрация: 01.07.2015
Сообщений: 6
02.08.2015, 00:10  [ТС]     Использование ifstream в VSC++ #5
Спасибо, проблема была в том что список с файлами содержал абсолютные адреса, заменил на просто названия файлов всё заработало.
Yandex
Объявления
02.08.2015, 00:10     Использование ifstream в VSC++
Ответ Создать тему
Опции темы

Текущее время: 02:39. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru