Russian Qt Forum
Ноябрь 26, 2024, 02:47 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Низкая скорость записи в файл.  (Прочитано 2888 раз)
truetrup
Гость
« : Ноябрь 11, 2011, 21:39 »

Имеется программа переписывающая содержание файла нулями вот код:
Код:
QFile file1(filename);
    file1.open(QIODevice::ReadWrite);
    char ch=qint16(0);
    int i;
    for (i=1;i!=file1.size();i++){
        file1.write(&ch,sizeof(ch));}
    file1.close();
Проблема заключается в очень низкой скорости записи в файл... Может кто-нибудь подскажет как ускорить процесс записи? Заранее благодарен.
Записан
BRE
Гость
« Ответ #1 : Ноябрь 11, 2011, 21:43 »

Попробуй записывать блоками.
Определи QByteArray размером скажем 64 Кб, залей его 0 и записывай сразу блоками по 64 Кб.
Записан
andrew.k
Гость
« Ответ #2 : Ноябрь 11, 2011, 23:41 »

Не про скорость, а так.
int маловато для размера файла.
quint64.

И третья строка смешная) зачем приводить ноль к quint16, чтобы потом присвоить его в char?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Ноябрь 11, 2011, 23:46 »

может проще просто пересоздать файл (т.е. открыть для записи) и применить QFile::resize()?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
truetrup
Гость
« Ответ #4 : Ноябрь 14, 2011, 21:01 »

2BRE:
Благодарю, примерно так и сделал, только размер взял в 4 кб, как раз под размер кластера...
2andrew.k:
Действительно чушь какуюто сотворил=)
2kambala:
Стоит попробовать изменить размер на меньший, а потом вернуть к исходному и посмотреть что в нем будет...
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.079 секунд. Запросов: 22.