Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.08.2015, 20:37   #1
The New Guy
 
Регистрация: 01.07.2015
Сообщений: 6
По умолчанию Использование ifstream в VSC++ - C++

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

Код:
#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;
}
The New Guy вне форума Ответить с цитированием
Старый 01.08.2015, 20:41   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
fin.open("files.txt");
Это значит, что файл будет искаться в рабочей папке. Т.е. для портирования достаточно сделать ярлык, в котором указать рабочую папку, и раскидывать этот ярлык где нужно.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.08.2015, 21:40   #3
The New Guy
 
Регистрация: 01.07.2015
Сообщений: 6
По умолчанию

Попробовал всюду побрасать ярлыки txt файла, не спасает
The New Guy вне форума Ответить с цитированием
Старый 01.08.2015, 22:23   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
побрасать ярлыки txt файла
Чего??? Я тебе про ярлык на твою программу говорю )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.08.2015, 19:27   #5
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

The New Guy, проверьте открывается ли файл:

Код:
    if(!fin.is_open()){
        std::cout << "Error" << std::endl;
        return;
    }
И если используете fstream, тогда установите режим, в котором открывать файл:
Код:
fin.open("files.txt", ios::in);

ios::in - чтение
ios::out - запись
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).

Последний раз редактировалось Krasiosoft; 02.08.2015 в 19:35.
Krasiosoft вне форума Ответить с цитированием
Старый 15.08.2015, 14:00   #6
ninja2
Форумчанин
 
Регистрация: 13.08.2015
Сообщений: 193
По умолчанию

А как можно получить абсолютный путь к файлу? Мне нужно файл указывать как url, через абсолютный путь для функции Navigate. Если я укажу конкретно путь то на другом компьютере если перенести программу он поменяется, нужно динамически составлять путь, Как узнать абсолютный путь к фалу exe программы? Фал будет создаваться там же????
ninja2 вне форума Ответить с цитированием
Старый 15.08.2015, 17:01   #7
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Если Вы не изменяете текущую директорию, то можно брать путь через WinAPI GetCurrentDirectory.

Еще можно брать полный путь к запускающему файлу через GetModuleFileName.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
OpenDialog vs ifstream? Baburek C++ Builder 4 10.01.2014 15:41
Требуется доработать image viewer(VSC++) Qt/OpenGL veshiyoleg Фриланс 1 11.05.2012 20:58
ifstream rik_nel Общие вопросы C/C++ 3 07.09.2010 00:32
ifstream() Артэс Общие вопросы C/C++ 1 13.01.2010 19:07
ifstream Артэс Общие вопросы C/C++ 10 21.06.2009 10:47