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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.11.2012, 03:25   #1
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию Расширение файла

Всем добрый день!
Меня интересует, как увеличить размер файла? Есть такая задача:
Человек пишет в консоль слово, программа записывает это слово в файл, потом проскакивает 1024 байта и снова пишет его, потом снова проскакивает 1024 байта и снова пишет его, а потом в этих "пустых" 2048 байтах ещё что-то пишет. Дело в том, что fseek работает, когда нужно по выделенной памьяти файла прыгать, а что делать когда файл только что создали? Есть вариант забивать все это место чем-нибудь, а потом возвращатся в эти места, но может есть другой способ, более правильный и менее ресурсоемкий (вместо килобайта, могут быть и гигабайты).

Всем спасибо. Прошу писать мне об граматических ошибках и неясностях.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 23.11.2012, 08:56   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

fseek работает и с пустыми файлами, проблема в том, что в пустом месте будет скорее всего "мусор", неинициализированные данные. Под NTFS можно делать sparse file - файлы с "дырками" на месте этих дырок будет читать нули. Если надо делать универсально, тогда надо писать вести учет какой участок файла уже занят а какой свободен и т.д. Вопрос вот в чем - а зачем все это нужно?
waleri вне форума Ответить с цитированием
Старый 23.11.2012, 09:19   #3
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

а в чем проблема записывать 1024 0-байта?
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 23.11.2012, 09:22   #4
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
fseek работает и с пустыми файлами, проблема в том, что в пустом месте будет скорее всего "мусор", неинициализированные данные. Под NTFS можно делать sparse file - файлы с "дырками" на месте этих дырок будет читать нули. Если надо делать универсально, тогда надо писать вести учет какой участок файла уже занят а какой свободен и т.д. Вопрос вот в чем - а зачем все это нужно?
На счет мусора, так я и предполагал, моя система должна записывать части файлов по порядку, но сразу во многих потоках, то есть работать с разными источниками данных, но если произойдет сбой одного из источников, чтобы она не останавливалась, это место должно быть пропущено.

Ну я пытаюсь писать универсально, потому не пойдет ) Но я веду учет этих участков.

На счет fseek, у меня не получилось работать с пустыми файлами, сами гляньте:

Код:
#include <stdio.h>

int main()
{
    FILE* f;

    if(!(f = fopen("Test.dat", "wb")))
    {
        perror("Error create file");

        return 0;
    }

    fprintf(f, "Test: start");

    fseek(f, SEEK_SET, 1024);

    fprintf(f, "Test: middle");

    fseek(f, SEEK_CUR, 1024);

    fprintf(f, "Test: end");

    fclose(f);

    return 0;
}
А вот результат из hex редактора:
Цитата:
54 65 73 74 3A 20 73 74 61 72 74 54 65 73 74 3A 20 6D 69 64 64 6C 65 54 65 73 74 3A 20 65 6E 64
Что равнозначно:
Цитата:
Test: startTest: middleTest: end
Это ещё не конец и даже не начало конца, это возможно только конец начала.

Последний раз редактировалось pufystyj; 23.11.2012 в 09:25.
pufystyj вне форума Ответить с цитированием
Старый 23.11.2012, 09:27   #5
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от masax Посмотреть сообщение
а в чем проблема записывать 1024 0-байта?

Не понял, забивать нулями? Я думал это быдет долго... ДУмал скорее мусором, что там уже есть...
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 23.11.2012, 09:30   #6
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

если ты не будешь делать по 5 тысяч записей в секунду то не заметишь
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 23.11.2012, 09:36   #7
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от masax Посмотреть сообщение
если ты не будешь делать по 5 тысяч записей в секунду то не заметишь
Ну по идеи в начале запуска программы, файл создаеться, например 7 гигабайт... многовато )

лин, а что я туплю, чем бы не попробовать.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 23.11.2012, 09:38   #8
masax
Форумчанин
 
Регистрация: 01.10.2008
Сообщений: 248
По умолчанию

ну так создай его в начале программы и заполни нулевыми байтами и потом работай с ним через fseek
Контакты
skype, почта: bm@kwax.ru
masax вне форума Ответить с цитированием
Старый 23.11.2012, 09:46   #9
pufystyj
Форумчанин
 
Аватар для pufystyj
 
Регистрация: 10.11.2010
Сообщений: 569
По умолчанию

Цитата:
Сообщение от masax Посмотреть сообщение
ну так создай его в начале программы и заполни нулевыми байтами и потом работай с ним через fseek
За 30 секунд программы 150 мегабайт... 5 минут = 1500 мегабайт.
Это ещё не конец и даже не начало конца, это возможно только конец начала.
pufystyj вне форума Ответить с цитированием
Старый 23.11.2012, 09:51   #10
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Я бы писал из одного потока а все остальные потоки добавляли бы в очередь на запись. Тогда вся это сложность оптпадает.
waleri вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять расширение файла TheSun Помощь студентам 1 28.11.2011 19:36
Расширение файла tools Visual C++ 1 20.12.2010 08:38
Расширение файла в Delphi vlad00777 Помощь студентам 3 18.10.2009 21:11
Получить расширение файла Бутаков_Сергей Общие вопросы Delphi 11 21.09.2009 11:15
Расширение файла Александр! Операционные системы общие вопросы 9 21.02.2009 16:37