Virus |
Отправлено: 17.10.2006, 18:13 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
Какой эквивалент Pascal'евской функции Truncate есть в BCB?
Я в смысле урезания файла на определённой позиции. |
|
AVC |
Отправлено: 18.10.2006, 08:43 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
Например SetEndOfFile. |
|
Virus |
Отправлено: 19.10.2006, 21:21 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
Спасибо, попробую. |
|
Grigoriy |
Отправлено: 20.10.2006, 01:14 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
SetEndOfFile, насколько мне известно — это API-функция.
|
|
AVC |
Отправлено: 20.10.2006, 08:29 |
|
Ветеран
Группа: Модератор
Сообщений: 1583
|
QUOTE (Grigoriy @ 20.10.2006, 01:14) | SetEndOfFile, насколько мне известно — это API-функция. |
И ? |
|
Virus |
Отправлено: 20.10.2006, 19:09 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
То, что API меня не смущает, но появился ещё вопрос:
Я использовал для работы с файлами функции я использовал fopen, а он возвращает указатель (FILE *). SetEndOfFile возвращает дексриптор файла (int).
Есть ли другя функция или придётся переписывать код для работы с файлами? |
|
Grigoriy |
Отправлено: 20.10.2006, 19:56 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
QUOTE (Virus @ 20.10.2006, 20:09) | Есть ли другя функция или придётся переписывать код для работы с файлами? |
API-функция
HANDLE CreateFile(
LPCTSTR lpFileName, // pointer to name of the file
DWORD dwDesiredAccess, // access (read-write) mode
DWORD dwShareMode, // share mode
LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security attributes
DWORD dwCreationDistribution, // how to create
DWORD dwFlagsAndAttributes, // file attributes
HANDLE hTemplateFile // handle to file with attributes to copy
);
возвращает ХЕНДЛ создаваемого или открываемого файла.
Затем устанавливаем указатель файла в необходимую позицию API-функцией
DWORD SetFilePointer(
HANDLE hFile, // handle of file
LONG lDistanceToMove, // number of bytes to move file pointer
PLONG lpDistanceToMoveHigh, // address of high-order word of distance to move
DWORD dwMoveMethod // how to move
);
и используем API-функцию
BOOL SetEndOfFile(
HANDLE hFile // handle of file whose EOF is to be set
);
Закрываем файл API-функцией
BOOL CloseHandle(
HANDLE hObject // handle to object to close
);
В Windows SDK (в Билдере) на эти функции есть HELP.
По предметному указателю можно легко найти.
|
|
Admin |
Отправлено: 20.10.2006, 20:37 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Связать FILE* и Handle:
FILE *temp_file;
int handle;
/* получить дескриптор данного файла */
handle = fileno(temp_file);
|
|
Grigoriy |
Отправлено: 20.10.2006, 22:07 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
Простите, а еще вопрос...
А какой подключаемый файл нужно использовать, чтобы можно было использовать функцию
HANDLE fileno( FILE*)
?
|
|
Admin |
Отправлено: 21.10.2006, 09:06 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
Напишите эту функцию в коде C++Builder нажите F1
и получите по ней справку с примером.
Header File
stdio.h
|
|
Grigoriy |
Отправлено: 22.10.2006, 02:13 |
|
Мастер участка
Группа: Участник
Сообщений: 381
|
В общем _fileno — это макрос
а не функция.
А работа этого макроса заключается в том, чтобы извлечь двухбайтное значение ячейки памяти со смещением 0x16 относительно указателя
FILE*
и расширить его до четырехбайтного со знаковым расширением.
|
|
Virus |
Отправлено: 23.10.2006, 19:21 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 17
|
Извиняюсь, что давно не был, времени не хватало.
В общем, fileno. Хорошо попробую.
Спасибо всем. |
|
Boyko |
Отправлено: 26.10.2006, 16:05 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 88
|
Тоже давно не был.
Когда-то писал
CODE | fHandle=FileOpen(fName,fmOpenWrite);
FileSeek(fHandle,-truncationSize,2);
SetEndOfFile((HANDLE) fHandle);
FileClose(fHandle); | |
|