Установить конец файла

Тема в разделе "WASM.WIN32", создана пользователем nullPtr, 2 янв 2021.

Метки:
  1. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Читаю файл, маппирую в память.
    Вес файла 20 мб.
    После идет такая конструкция:
    unsigned char* dataPtr = (unsigned char*)MapViewOfFile(...);
    обнуляю данные при помощи memset

    После туда записываю другие данные с размером 10 мб. (memcpy)
    После закрытия всех хендлов файл весит так же 20 мб, из которых 10 мб мои данные - остальные пустые.
    Понятно, что memset обнулил, но как урезать конец файла на 10мб?

    dataPtr[sz] = '\0' - nope хелп
    SetEndOfFile ваще урезает в первых 10 строчках.

    В целом не критично все это, но желательно срезать. Есть какие варианты?
    --- Сообщение объединено, 2 янв 2021 ---
    P.S это НЕ ЛОКЕР.
     
  2. X-Shar

    X-Shar Active Member

    Публикаций:
    0
    Регистрация:
    24 фев 2017
    Сообщения:
    354
    У тебя два варианта:

    1)Если используешь именно SetEndOfFile, то перед ее вызовом, нужно установить указатель в файле на 10 мб., путем вызова fseek.

    2)Закрыть файл, и открыть его на запись с флагом CREATE, ну и записать туда нужные 10 мб.

     
  3. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    1. Не сработало с SetFilePointer. На венапе еслчо

    2. Рассматривал такой варик, пока что самый подходящий. Но два раза открывать, закрывать не охота.
    как бы не критично, но там просто висят 10мб впустую.

    Да не пишу я локер бро))) там немного другое) оч кажется что локер, но не))
    --- Сообщение объединено, 2 янв 2021 ---
    хотя да, Хы Шар помог решить проблему.
    В чем трабл был то

    Нужно ставить SetFilePointer на нужное смещение, а после SetEndOfFile.

    Но это нужно объявить строго только тогда, когда закрыли хендлы MapViewOfFile & CreateFileMapping

    Элементарно, думал не будет влиять, а во как
     
  4. M0rg0t

    M0rg0t Well-Known Member

    Публикаций:
    0
    Регистрация:
    18 окт 2010
    Сообщения:
    1.576
    А что ты тут передаешь, какие смещения? Можно тут выделить 10 метров, zeromemory, а потом да, закрыть хендлы
     
  5. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    в мепвьюфайл последним параметром передаю размер исходного файла. Т.е. 20 мб, а после сжимаю и получается 10 мб и это все обратно в файл записать надо.
    А у меня было то, что остальные 10мб пустые и файл тупо большой.

    p.s. это не то, что мы обсуждали на дамаге. Другое. Если интересно, то в лс отпиши
     
  6. sn0w

    sn0w Active Member

    Публикаций:
    0
    Регистрация:
    27 фев 2010
    Сообщения:
    958
    секцией, не вариант? маппинг и пошло-поехало
     
  7. nullPtr

    nullPtr Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2020
    Сообщения:
    138
    Да уже все решилось. Там прост код должен принимать сугубо хендл файла для отработки. Маппинг все решил
     
  8. hiddy

    hiddy Member

    Публикаций:
    0
    Регистрация:
    10 мар 2019
    Сообщения:
    82