bool CReadWrite::write(unsigned long long offset, void* pvsrc, unsigned long long nbytes)
{ int m_WriteResult;
pFile = fopen("E:\\myfile.bin","wb");
if (!pFile){
puts("Can't open file");
return false;
}
fseek(pFile,SIZE_OF_FILE-1,SEEK_SET);
fwrite(pvsrc,1,1,pFile);
fseek(pFile,offset,SEEK_SET);
printf("fseek(pFile,SIZE_OF_FILE-1,SEEK_SET); returned -- ", fseek(pFile,SIZE_OF_FILE-1,SEEK_SET));
printf( "fwrite(pvsrc,1,1,pFile); returned -- %d", fwrite(pvsrc,1,1,pFile));
printf("Current file pointer position is : %d\n",ftell(pFile));
m_WriteResult = fwrite (pvsrc, 1, nbytes, pFile);
if (m_WriteResult == nbytes){
puts("Wrote to file");
printf("The number of bytes written to the file is : %d\n\n",m_WriteResult);
fclose(pFile);
return true;
}
else{
puts("Unable to write to File.");
fclose(pFile);
return false;
}
}
main.cpp:
char* pWriteBuffer;
char* pReadBuffer;
int nbytes = 85;
int nbytes2= 10;
pWriteBuffer = new char [nbytes];
pReadBuffer = new char [nbytes];
CReadWrite test;
for(Bufferndx = 0; Bufferndx<nbytes; Bufferndx++){
pWriteBuffer[Bufferndx] = Bufferndx;
}
test.write(20,pWriteBuffer,50);
for(Bufferndx = 10; Bufferndx;Bufferndx--){
pWriteBuffer[Bufferndx] = Bufferndx;
}
test.write(30,pWriteBuffer,nbytes2);
test.read(5,pReadBuffer,85);
delete[] pWriteBuffer;
delete[] pReadBuffer;
Это часть моей программы, которая пишет в данный буфер. Функция записи получает смещение, источник и количество байтов для записи.
Сначала проверяется, удалось ли открыть файл, fseek
s до желаемого размера файла -1, затем записывает байт. Затем fseek
s в файле с указанным смещением. Если он успешно записал nbytes
, он распечатывает некоторые данные, а затем закрывает файл. В противном случае он печатает, что не смог записать, и закрывает файл.
В моем основном я просто проверяю, что мой код действительно написал то, что я хотел, и у меня есть два цикла for, которые имеют две записи после. Я также делаю test.read
после этого, но я не уверен, почему я не могу видеть правильные результаты, я думаю, что я должен попасть в режим отладки при компиляции.
Только к вашему сведению, функция класса read
практически идентична write
, но, конечно, fread
.
У меня вопрос: почему я не получаю результаты, когда перехожу через режим отладки, и почему я не могу видеть, что буфер заполнен правильно. Это "почти", как будто мои write
s / read
на самом деле не происходят.
РЕДАКТИРОВАТЬ: То, что я "пытаюсь сделать", это заполнить буфер 85 байтами (мой самый большой буфер).
- Мой
test.write(20,pWriteBuffer,50)
будет начинаться со смещения 20 и записывать 50 байтов, иначе. смещение 20 -70.
- Моя вторая запись
test.write(30,pWriteBuffer,nbytes2)
начнется со смещения 30 и запишет 10 байтов, иначе. смещение 20-30.
- И в-третьих, я прочитал все это, и я должен быть в состоянии сказать, где происходят все записи.
Или это план, но я не вижу этого при отладке. Кроме того, Может быть, кто-то может пролить свет на это, но я рассматриваю это, и похоже, что я ...
fseek(pFile,SIZE_OF_FILE-1,SEEK_SET);
fwrite(pvsrc,1,1,pFile);
каждый раз, когда я пишу, что неправильно ... Я не должен искать и увеличивать размер файла каждый раз, когда пишу. Тьфу
printf ("fwrite (pvsrc, 1,1, pFile); возвращено -% d", fwrite (pvsrc, 1,1, pFile)); // распечатывает 1
printf ("fseek (pFile, SIZE_OF_FILE-1, SEEK_SET); возвращено -", fseek (pFile, SIZE_OF_FILE-1, SEEK_SET)); // распечатывает 0