6. Установка конца файла
Обычно система сама устанавливает конец файла при его закрытии. Но иногда нужно принудительно укоротить или расширить файл. Для этого используется функция
BOOL SetEndOfFile(HANDLE hFile); Она изменяет длину файла по текущему значению файлового указателя.
24. Организация файлов. Текстовые (*.Txt) и бинарные файлы
Организация файлов
Организация файлов зависит от физических характеристик внешнего устройства:
1) последовательная – предусматривает создание на внешнем носителе последовательного файла. Последовательный файл – файл, к компонентам которого обеспечивается лишь последовательный доступ, в соответствии с упорядоченностью этих компонентов. Обычно в последовательных файлах используется один указатель от одного блока к другому. Иногда применяют двусвязный список. В одном блоке последовательного файла м/б размещена одна или несколько записей последовательного набора данных.
2) непрерывная – предполагает создание на внешнем носителе непрерывного файла. Непрерывный файл – файл на носителе, состоящий из ряда физических блоков, которые расположены в одной области внешнего устройства. Такая организация обеспечивает самый быстрый доступ к файлам.
3) сегментная – предполагает создание сегментированного (индексированного) файла. Индексированный файл – файл, состоящий из адреса блоков данных.
Текстовые файлы
Текстовые файлы представляют собой набор однобайтовых (ANSI) или двухбайтовых данных (UNICODE), содержащих коды символов, т. е. текстовую информацию. В оперативной памяти строкой считается последовательность байт, закрытая нуль (\0) символом. В текстовом файле каждая строка завершается символом возврата каретки (\r) и переводом строки (\n) или 0D0A в шестнадцатеричной кодировке.
Создание текстового файла:
if(GetOpenFileName(&ofn)==TRUE)
{ //Открываем файл для чтения
hFile = CreateFile(ofn.lpstrFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);}
Чтение текстового файла:
ReadFile(hFile, str1, length_file, &length,NULL);
Запись в текстовый файл:
hFile = CreateFile(ofn.lpstrFile, GENERIC_WRITE, FILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
length = GetWindowTextLength(hEdit);
WriteFile(hFile,buf,length,&lng,NULL);
Бинарные файлы
Бинарные файлы содержат массивы длинных чаще всего нетекстового вида, это могут быть как целые, так и вещественные числа, пользовательские структуры данных и т. п.
Вариант создания двоичного файла с использованием стандартного диалога:
if(GetSaveFileName(&ofn)==true)
{hFile = CreateFile(ofn.lpstrFile,GENERIC_WRITE, FILE_SHARE_WRITE,
NULL, CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);}
Чтение данных из двоичного файла в шестнадцатеричной кодировке
iLength = GetFileSize(hFile, NULL); // определяем длинну файла
SetFilePointer(hFile, 0, NULL, FILE_BEGIN); // устанавливаем указатель файла на начало файла
ReadFile(hFile, sread, iLength, &iRead, NULL); // считываем из него данные
i = 0;
// форматируем строку и выводим в шестнадцатеричном виде
while (i < iLength)
{ k += sprintf(q + k, "%x " ,(unsigned char)sread[i]);
i++; }
SetDlgItemTextA(hwnd, IE_DUMP, q);