Читаю файл, маппирую в память. Вес файла 20 мб. После идет такая конструкция: unsigned char* dataPtr = (unsigned char*)MapViewOfFile(...); обнуляю данные при помощи memset После туда записываю другие данные с размером 10 мб. (memcpy) После закрытия всех хендлов файл весит так же 20 мб, из которых 10 мб мои данные - остальные пустые. Понятно, что memset обнулил, но как урезать конец файла на 10мб? dataPtr[sz] = '\0' - nope хелп SetEndOfFile ваще урезает в первых 10 строчках. В целом не критично все это, но желательно срезать. Есть какие варианты? --- Сообщение объединено, 2 янв 2021 --- P.S это НЕ ЛОКЕР.
У тебя два варианта: 1)Если используешь именно SetEndOfFile, то перед ее вызовом, нужно установить указатель в файле на 10 мб., путем вызова fseek. 2)Закрыть файл, и открыть его на запись с флагом CREATE, ну и записать туда нужные 10 мб.
1. Не сработало с SetFilePointer. На венапе еслчо 2. Рассматривал такой варик, пока что самый подходящий. Но два раза открывать, закрывать не охота. как бы не критично, но там просто висят 10мб впустую. Да не пишу я локер бро))) там немного другое) оч кажется что локер, но не)) --- Сообщение объединено, 2 янв 2021 --- хотя да, Хы Шар помог решить проблему. В чем трабл был то Нужно ставить SetFilePointer на нужное смещение, а после SetEndOfFile. Но это нужно объявить строго только тогда, когда закрыли хендлы MapViewOfFile & CreateFileMapping Элементарно, думал не будет влиять, а во как
А что ты тут передаешь, какие смещения? Можно тут выделить 10 метров, zeromemory, а потом да, закрыть хендлы
в мепвьюфайл последним параметром передаю размер исходного файла. Т.е. 20 мб, а после сжимаю и получается 10 мб и это все обратно в файл записать надо. А у меня было то, что остальные 10мб пустые и файл тупо большой. p.s. это не то, что мы обсуждали на дамаге. Другое. Если интересно, то в лс отпиши
Да уже все решилось. Там прост код должен принимать сугубо хендл файла для отработки. Маппинг все решил