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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2013, 08:02   #1
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию Функции fseek, _fseeki64

Ребят как по умному объяснить преподавателю что я использую функцию _fseeki64 для того чтобы создавать большие файлы, потому что функция fseek не создает файлы больше 4GB. Вот сам код:
Код:
#include <iostream>
#include "stdafx.h"
using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
setlocale(LC_ALL, "russian");
__int64 start, finish, move;
FILE *f;
char name;
const int s = 10;
char filename [s];
cout<<"Введи имя файла(вместе с расширением): \n";
cin.getline(filename, s);
if((f = fopen(filename, "r+b")) !=NULL)
	{
	_fseeki64(f,0,SEEK_SET);
	cout<<"Начальная позиция: ";
	cin>> start;
	cout<<"Конечная позиция: ";
	cin>> finish;
	char * buffer = (char*) malloc(finish-start);
	_fseeki64 (f,start,SEEK_SET);
	for (int i = 0; i<finish-start; i++)
		{
         fread((char * ) &name,1 , 1, f);
		 _fseeki64(f,start+i,SEEK_SET);
		 buffer[i] = name;
		}
	cout<<"На сколько перенести?:";
	cin>> move;
	_fseeki64(f,move+start,SEEK_SET);
	fwrite(buffer, sizeof ( char ), (finish-start), f);
	_fseeki64(f,0,SEEK_SET);
	}
return 0;
}
MishkaSh вне форума Ответить с цитированием
Старый 02.10.2013, 09:36   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
как по умному объяснить преподавателю
Никак. Потому что функция fseekХХ не создает файлы в принципе
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.10.2013, 10:03   #3
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Никак. Потому что функция fseekХХ не создает файлы в принципе
Ну в смысле почему я именно ее использую
MishkaSh вне форума Ответить с цитированием
Старый 02.10.2013, 10:18   #4
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Поправьте меня если я ошибаюсь, но fseek() - это перемещение курсора по файлу... Нет!!!!
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.10.2013, 11:05   #5
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Поправьте меня если я ошибаюсь, но fseek() - это перемещение курсора по файлу... Нет!!!!
Ладно спрошу так, почему мы берем __int64 для создания больших файлов, а не просто int?
MishkaSh вне форума Ответить с цитированием
Старый 02.10.2013, 11:14   #6
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Цитата:
Сообщение от MishkaSh Посмотреть сообщение
Ладно спрошу так, почему мы берем __int64 для создания больших файлов, а не просто int?
Мне кажется вы зациклились на больших файлах...
int - это тип (определенный диапазон значений переменной). Не могу понять причем тут размер файла???? Поясните....
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.10.2013, 11:17   #7
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Мне кажется вы зациклились на больших файлах...
int - это тип (определенный диапазон значений переменной). Не могу понять причем тут размер файла???? Поясните....
Простого intа не хватит чтобы сделать смещение к примеру в 10 гигов
MishkaSh вне форума Ответить с цитированием
Старый 02.10.2013, 11:18   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Bugrimov Посмотреть сообщение
Мне кажется вы зациклились на больших файлах...
int - это тип (определенный диапазон значений переменной). Не могу понять причем тут размер файла???? Поясните....
да всё просто.
размера int (int 32-х разрядный имеется в виду) для хранения размера файла (или для перемещения по файлу, если речь идёт о fseek) НЕ ХВАТАЕТ, если размер файла превышает 4Гб (4294967296 байт)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.10.2013, 11:21   #9
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,680
По умолчанию

Вот теперь понятно, спасибо Serge_Bliznykov.
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 02.10.2013, 11:22   #10
MishkaSh
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 21
По умолчанию

Все понял ребят, большое спасибо
MishkaSh вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Табулирование заданной функции и определение максимального и минимального значения функции в таблице Марина1986 C/C++ Сетевое программирование 0 07.05.2013 11:31
Нужно исправить код! Файлы,cи, fseek ленок-носок Помощь студентам 4 24.03.2012 22:59
Как подменить адрес возврата функции func на адрес функции f используя переполнение буфера buf и функции gets dmitrii6120 Помощь студентам 6 14.11.2011 20:10
заморочки функций fseek и fwrite tiger() C++ Builder 2 25.04.2011 13:31
fseek вместо дополнительного массива (язык Си) velvetdust Помощь студентам 3 25.06.2009 21:32