DiskSize — Функция Delphi

как определить размер диска?

03.06.2011, 16:13

Как определить размер типизированного файла
Подскажите, пожалуйста, как определить размер типизированного файла, который может быть либо.

Как максимально точно определить размер файла?
Допустим, файл содержит следующую информацию: 111 222 Пусть все символы имеют кодировку ANSI.

Как изменить размер TImage под текущий размер Picture ?
Доброго времени суток! Есть задача (Delphi 7). В TImage загружается Picture с условиями: Center.

Определить размер диска и количество свободного места
Как определить полный размер и размер свободного пространства диска?(lazarus)

Как изменить размер диска?
Один диск, разбит на 2. Под Винду и проги зделал 10гигов. Но оказалось мало :) Во второй половине.

Ошибка DiskSize Delphi

У меня есть функция, которая проверяет, является ли диск (CD/DVD, USB-ключ, гибкий диск в порядке).

Он отлично работал. Если он меньше 0. Он возвращает, что нет подключенного диска.

Большая проблема, я удалил свой pendrive, не выбрасывая ;;; Я вытащил pendrive. Следовательно, функция DiskSize возвращает следующую ошибку:

в диске есть диск. вставьте диск в приводное устройство

Как исправить эту ошибку. потому что функция работает правильно. Просто DiskSize, который генерирует эту ошибку, тот факт, что я был puzado палкой без Eject.

Моя система — Windows 7 64 бит. Я обнаружил, что ошибка возникает после удаления карты памяти принтера. Но проблема в том, что эта карта compatilhado Network. Когда я удаляю сетевой ресурс. он не генерирует Ошибка.

DiskSize — Функция Delphi

Профиль
Группа: Участник
Сообщений: 20
Регистрация: 26.11.2010

Репутация: нет
Всего: нет

Всем привет. Влияют ли bad-сектора (т. е., поврежденные сектора) жесткого диска на значение, возвращаемое функцией DiskSize?
Приведу пример. Допустим емкость диска С:
20 000 000 000 байт (для ровного счета), из них
1 000 000 байт находится в bad-секторах.
Какое значение вернет функция DiskSize для диска С?

Это сообщение отредактировал(а) grh — 20.2.2020, 10:24

Google
Дата 11.11.2020, 23:25 (ссылка)

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) — крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

DiskSize Routine

Unit Edit

Description Edit

Definition (Delphi 6, 2007, 2010):

Technical Comments Edit

(Known issues / Documentation clarifications / Things to be aware of)

Examples Edit

(Please provide links to articles/source code that show how to use this item.)

See Also Edit

(Please provide links to items specifically related to this item.)

User Comments/Tips Edit

(Please leave your name with your comment.)

Ошибка DiskSize Delphi

У меня есть функция, которая проверяет, является ли диск (CD/DVD, USB-ключ, гибкий диск в порядке).

Он отлично работал. Если он меньше 0. Он возвращает, что нет подключенного диска.

Большая проблема, я удалил свой pendrive, не выбрасывая ;;; Я вытащил pendrive. Следовательно, функция DiskSize возвращает следующую ошибку:

в диске есть диск. вставьте диск в приводное устройство

Как исправить эту ошибку. потому что функция работает правильно. Просто DiskSize, который генерирует эту ошибку, тот факт, что я был puzado палкой без Eject.

Моя система — Windows 7 64 бит. Я обнаружил, что ошибка возникает после удаления карты памяти принтера. Но проблема в том, что эта карта compatilhado Network. Когда я удаляю сетевой ресурс. он не генерирует Ошибка.

Ошибка DiskSize Delphi

У меня есть функция, которая проверяет, в порядке ли привод (CD / DVD, USB-диск, дискета) .

Он работал отлично . Если он меньше 0 . Возвращает, что нет подключенного диска .

Большая проблема, я удалил свой pendrive, не извлекая ;;; Я вытащил Pendrive . Следовательно, функция DiskSize возвращает следующую ошибку:

в дисководе есть диск пожалуйста, вставьте диск в дисковод

Как я могу исправить эту ошибку . потому что функция работает должным образом . Просто DiskSize, который генерирует эту ошибку, тот факт, что я был puzado Stick без Eject .

Моя система — Windows 7 64bit . Я обнаружил, ошибка генерируется, поскольку извлекается карта памяти принтера . Но проблема в том, что эта карта совместима с сетью . Когда я удаляю сетевой ресурс . он не генерирует Ошибка .

Функции Delphi модуля SysUtils

Модуль SysUtils

Предлагаем список функций модуля SysUtils, используемого в среде разработки Delphi.

AnsiCompareStr Сравнение двух строк на равенство
AnsiCompareText Сравнение двух строк на равенство
AnsiLowerCase Символы верхнего регистра изменяются в строку со строчными буквамм
AnsiPos Находит позицию одной строки в другой
ChangeFileExt Изменяет расширение имени файла
CompareStr Сравнивает две строки, чтобы увидеть, какая из них больше
CompareText Сравнивает две строки, игнорируя регистр
CreateDir Создаёт директорию
CurrToStr Преобразует денежную величину в строку
CurrToStrF Преобразует денежную величину в строку с форматированием
Date Возвращает текущую дату
DateTimeToFileDate Преобразует значение TDateTime в формат date/time формат файла
DateTimeToStr Конвертирует значение даты и времени TDateTime в строку
DateToStr Преобразует значение даты TDateTime в строку
DayOfWeek Выдает индекс дня недели для значения TDateTime
DeleteFile Удаляет файл, указанный в параметре
DirectoryExists Возвращает true, если указанная директория существует
DiskFree Выдает число свободных байтов на указанном диске
DiskSize Выдает размер указанного диска в байтах
EncodeDate Формирует значение TDateTime из значений года, месяца и дня
EncodeTime Формирует значение TDateTime из значений часа, минуты, секунды и миллисеккунды
ExtractFileDir Извлекает из полного имени файла название папки
ExtractFileDrive Извлекает из полного имени файла название диска
ExtractFileExt Извлекает из полного имени файла его расширение
ExtractFileName Извлекает из полного имени файла краткое имя файла
ExtractFilePath Извлекает из полного имени файла название патча
FileAge Получение дата/время последнего изменения файла, не открывая его
FileDateToDateTime Конвертирует формат даты/времени файла в значение TDateTime
FileExists Возвращает True если указанный файл существует
FileGetAttr Выдаёт атрибуты файла
FileSearch Поиск файла в одной или более папках
FileSetAttr Устанавливает атрибуты файла
FindClose Закрывает успешный FindFirst поиск файла
FindCmdLineSwitch Определяет, был передан некоторый параметр выключатель
FindFirst Находит все файлы, соответствующие маске файла и атрибутов
FindNext Находит следующий файл после успешного FindFirst
FloatToStr Преобразует значение с плавающей запятой в строку
FloatToStrF Преобразует значение с плавающей запятой в строку с форматированием
ForceDirectories Создаёт новый путь каталогов
Format Богатое форматирование чисел и текста в строке
FormatCurr Богатое форматирование значений валюты в строку
FormatDateTime Богатое форматирование переменной TDateTime в строку
FormatFloat Богатое форматирование числа с плавающей запятой в строку
GetCurrentDir Возвращает текущий каталог (диск плюс каталог)
IncMonth Увеличивает TDateTime переменную на некоторое число месяцев
IntToHex Преобразует целое число в шестнадцатеричную строку
IntToStr Конвертирует целое число в строку
IsLeapYear Возвращает True, если данный календарный год високосный
LastDelimiter Находит последнюю позицию указанных символов в строке
LowerCase Изменяет символы верхнего регистра в строке в строчные буквы
Now Выдает текущую дату и время
RemoveDir Позволяет удалить директорию
Rename Переименовка фала
RenameFile Переименование файла или директории
SetCurrentDir Изменяет текущую директорию
StrScan Ищет заданные символы в строке
StrToCurr Преобразует числовую строку в денежное выражение
StrToDate Конвертирует строку с датой в значение типа TDateTime
StrToDateTime Конвертирует строку с датой и временем в значение типа TDateTime
StrToFloat Преобразует числовую строку в значение с плавающей запятой
StrToInt Преобразует строку с целым значением в Integer
StrToInt64 Преобразует строку с целым значением в Int64
StrToInt64Def Преобразует строку с целым значением в Int64, учитывая значение по умолчанию
StrToIntDef Преобразует строку с значение с типом Integer, учитывая значение по умолчанию
Time Возвращает текущее время
TimeToStr Конвертирует значение времени типа TDateTime в строку
Trim Удаляет начальные и конечные пробелы в строке
TrimLeft Удаляет начальные пробелы в строке
TrimRight Удаляет конечные пробелы в строке
UpperCase Изменяет символы в строке из нижнего регистра в верхний
WrapText Добавьте перенос строки в строку, чтобы имитировать перенос слов
Abort Прерывает обработку команд и выходит к последнему исключительному блоку
AppendStr Конкатенация одной строки в конец другой
Beep Делает звук гудка
DateTimeToString Огромные возможности форматирования даты в строку
DecodeDate Извлекает значения года, месяца, дня из TDateTime переменной
DecodeDateTime Разбивает TDateTime переменную на ее части даты/времени
DecodeTime Разбивает значение TDateTime на отдельные значения времени
FreeAndNil Освобождение памяти объекта и установка его в nil
FreeMem Освобождает память, используемую переменной
GetLocaleFormatSettings Получает региональные значения для безопасных потоков функций.
ReplaceDate Изменяет только часть даты TDateTime переменной
ReplaceTime Изменяет только часть времени TDateTime переменной

DiskSize Routine

Unit Edit

Description Edit

Definition (Delphi 6, 2007, 2010):

Technical Comments Edit

(Known issues / Documentation clarifications / Things to be aware of)

Examples Edit

(Please provide links to articles/source code that show how to use this item.)

See Also Edit

(Please provide links to items specifically related to this item.)

User Comments/Tips Edit

(Please leave your name with your comment.)

Процедуры и функции для работы с файлами в Delphi

Читайте также:

  1. Cущность банковского процента, его функции и роль.
  2. I. Функции времени в спутниковых технологиях.
  3. I. Экстремумы функции двух переменных
  4. II. Основные направления социально-медицинской работы с семьями детей ограниченными возможностями
  5. III. Лекционный материал по теме: ПРАВИЛА РАБОТЫ НА ЛЕКЦИИ
  6. IV. Функции
  7. IX. Лекционный материал: ОРГАНИЗАЦИЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
  8. N В условиях интенсивной мышечной работы, при гипоксии (например, интенсивный бег на 200м в течении 30 с) распад углеводов временно протекает в анаэробных условиях
  9. N Выполняет функции гормона
  10. N Особенности структуры и функции обуславливают особенности в метаболизме клеток
  11. TCR. Функции Т-лимфоцитов
  12. VIII. Принципы работы вычислительной системы
Правила форума «Delphi: Общие вопросы»

Основные процедуры и функции:

Процедура: AssignFile(var Vf; FileName: string);Модуль: System

Описание: Процедура устанавливает ассоциативную связь между файловой переменной Vf и внешним файлом, имя которого определено параметром FileName. Все операции, производимые с файловой переменной, будут производиться со связанным с ней файлом. FileName — выражение типа string или PChar (если допускается расширенный синтаксис). Если в качестве имени файла указать пустую строку, то файловая переменная будет ассоциирована со стандартным файлом ввода (когда после AssignFile следует процедура Reset) или вывода (когда после следует процедура Rewrite).

Пример:
var Vf : file of Integer;
begin
.
AssignFile(Vf,'work.dat'); //инициализирует файловую переменную
Rewrite(Vf); //создает файл 'work.dat'
CloseFile(Vf); //закрывает файл
.
end;

Процедура: BlockRead(var Vf: file; var Buf; Count: Integer [;var AmtTransferred: Integer]); Модуль: System

Описание: Процедура читает одну или большее количество записей из открытого файла, связанного с файловой переменной Vf, в переменную Buf. Параметр Count определяет количество записей, которое необходимо прочитать из файла. В параметре AmtTransferred возвращается фактическое количество прочитанных записей, которое может быть меньше Count (например, когда размер последнего блока данных в файле меньше заданного размера записи). Максимальный размер прочитанного блока равен Count*RecSize байт. RecSize — размер записи, определенный, во время открытия файла (если размер записи не был задан, то используется значение по умолчанию — 128 байт). Параметр AmtTransferred является необязательным. Но если данный параметр опущен, а количество прочитанных записей меньше Count, то возникнет ошибка ввода/вывода (исключение EInOutError).

Пример:
var
Vf1, Vf2: file; NRead, NWrite: Integer;
Buf: array[1..1024] of Char;
begin
AssignFile(Vf1, 'read.txt');
Reset(Vf1, 1); //Устан-ет размер записи входного файла = 1
AssignFile(Vf2, 'write.txt');
Rewrite(Vf2, 1); //Устан-ет размер записи выходного файла = 1
repeat
BlockRead(Vf1, Buf, SizeOf(Buf), NRead); //читает данные
BlockWrite(Vf2, Buf, NRead, NWrite); //записывает данные
until (NRead = 0) or (NWrite <> NRead);
CloseFile(Vf1);
CloseFile(Vf2);
end;

Процедура: BlockWrite(var Vf: file; var Buf, Count: Integer [;var AmtTransferred: Integer]); Модуль: System

Описание: Процедура записывает одну или несколько записей из переменной Buf во внешний файл, связанный с файловой переменной Vf. Параметр Count определяет количество записей, которое необходимо записать в файл. В параметре AmtTransferred возвращается фактическое количество скопированных записей, которое может быть меньше Count (например, когда место на диске закончилось до окончания записи в файл). Максимальный размер записываемого блока равен Count*RecSize байт, где RecSize — размер записи, определенный, во время открытия файла или 128 байт, если размер записи не был определен. Параметр AmtTransferred является необязательным. Но если данный параметр опущен, и количество прочитанных записей будет меньше Count, то возникнет ошибка ввода/вывода (исключение EinOutError).

Пример:
var
Vf1, Vf2: file;
NRead, NWrite: Integer;
Buf: array[1..1024] of Char;
begin
AssignFile(Vf1, 'read.txt');
Reset(Vf1, 1); //Устан-ет размер записи входного файла = 1
AssignFile(Vf2, 'write.txt');
Rewrite(Vf2, 1); //Устан-ет размер записи выходного файла = 1
repeat
BlockRead(Vf1, Buf, SizeOf(Buf), NRead); //читает данные
BlockWrite(Vf2, Buf, NRead, NWrite); //записывает данные
until (NRead = 0) or (NWrite <> NRead);
CloseFile(Vf1);
CloseFile(Vf2);
end;

Процедура: CloseFile(var Vf); Модуль: System

Описание: Процедура разрывает ассоциативную связь между файловой переменной и внешним файлом, при этом, файл обновляется и закрывается. Механизм обработки ошибок ввода/вывода с помощью обработчиков исключений включается директивой компилятора <$I+>. При использовании директивы <$I->информацию об ошибках можно получить с помощью функции IOResult.

Пример:
var
Vf: file of Integer;
begin
.
AssignFile(Vf, 'work.dat'); //инициализирует файловую переменную
Rewrite(Vf); //создает файл 'work.dat'
CloseFile(Vf); //закрывает файл
.
end;

Процедура: Erase(Var Vf); Модуль: System

Описание: Удаляет файл, связанный с файловой переменной Vf. Vf — файловая переменная, ассоциированная с файлом любого типа. Перед удалением файл необходимо закрыть процедурой CloseFile.

Пример:
var
Vf: file;
begin
AssignFile(Vf, 'C:\WINDOWS\TEMP\tmpfile.tmp');
Rewrite(Vf); //создает временный файл 'tmpfile.tmp'
.
CloseFile(Vf); //закрывает файл
Erase(Vf); //удаляет файл
end;

Процедура: FindClose(var F: TSearchRec); Модуль: SysUtils

Описание: Процедура завершает последовательность вызовов функций FindFirst — FindNext и высвобождает память, выделенную при вызове функции FindFirst.

Процедура: Read(Vf, V1 [, V2, . Vn ]); Модуль: System

Описание: Процедура читает информацию из файла, ассоциированного с файловой переменной Vf, в переменную(ые) Vn.

Типизированные файлы. Читает запись (компонент) из файла в переменную. Файлы строкового типа. Читает все символы до маркера конца строки, не включая его или пока значение Eof(Vf) не будет равно True. Если размер прочитанной строки больше, чем размер строковой переменной, то строка усекается. После прочтения строки, каждый последующий вызов данной процедуры будет возвращать пустую строку, т.к. процедура Read не переводит указатель на новую строку. Если необходимо прочитать более одной записи из файла, то используйте процедуру ReadLn. Файлы символьного типа. Читает символ из файла. Если достигнут конец файла (т.е. Eof(Vf)=True), то процедура возвращает символ ‘Ctrl+Z’ (ASCII код 26).

Файлы целочисленных и действительных типов. Если тип переменной соответствует формату числовой строки, то переменной присваивается прочитанное значение, иначе возникает ошибка ввода/вывода.

Пример:
var
Vf1,Vf2: TextFile;
FileName1, FileName2: string;
C: Char;
begin
FileName1:='read.txt'; //подразумевается, что файл существует
FileName2:='write.txt';
AssignFile(Vf1, FileName1);
Reset(Vf1); //открывает файл 'read.txt'
AssignFile(Vf2, FileName2);
Rewrite(Vf2); //создает файл 'write.txt'
while not Eof(Vf1) do //повтор, пока не достигнут конец файла
begin
Read(Vf1, C); //читает символ из файла 'read.txt'
Write(Vf2, C); //записывает символ в файл 'write.txt'
end;
CloseFile(Vf2);
CloseFile(Vf1);
end;

Процедура: Rename(var Vf; NewName); Модуль: System

Описание: Процедура переименовывает файл, связанный с файловой переменной Vf. Новое имя файла указывается в параметре NewName. NewName — переменная типа string или PChar (если допускается расширенный синтаксис). После выполнения данной процедуры все операции c файловой переменной Vf будут производиться над переименованным файлом.

Процедура: Reset(var Vf: File [;RecSize: Word]); Модуль: System

Описание: Процедура открывает существующий файл и устанавливает указатель в начало файла. Vf — файловая переменная, ассоциированная с файлом любого типа при помощи процедуры AssignFile. RecSize — необязательный параметр, указывающий размер записи файла. Когда параметр RecSize опущен, размер записи принимается по умолчанию 128 байт. Если файл, связанный с файловой переменной Vf, не существует, то при вызове процедуры Reset возникнет ошибка. Если файл уже открыт, то при вызове данной процедуры он сначала закрывается, а затем снова открывается. Если с файловой переменной Vf связан текстовый файл, то он открывается только для чтения.

Процедура: Rewrite(var Vf: File [; Recsize: Word]); Модуль: System

Описание: Процедура создает новый файл и открывает его. Параметр Vf определяет файловую переменную, связанную с любым типом файлов при помощи процедуры AssignFile. RecSize — необязательный параметр, указывающий размер записи файла. Когда параметр RecSize опущен, размер записи принимается по умолчанию 128 байт. Если файл с заданным именем уже существует, то процедура удаляет старый файл и создает новый пустой файл. Если файл существует и открыт, то функция перед удалением старого файла сначала закрывает его. Если файловая переменная Vf связана с текстовым файлом, то он открывается только для записи. После вызова данной процедуры Eof(Vf)=True.

Процедура: Seek(var Vf; N: Longint); Модуль: System

Описание: Устанавливает файловый указатель в заданную позицию файла. Параметр Vf представляет собой файловую переменную, ассоциированную с типизированным или нетипизированным файлом. Для успешного выполнения процедуры файл должен быть открыт. Индекс позиции, в которую будет установлен указатель, определяется параметром N. Первая позиция в файле имеет индекс 0. Если необходимо добавить данные в конец файла, то поставить указатель в конец файла Vf можно следующим образом: Seek(Vf, FileSize(Vf)).

Процедура: Truncate(var Vf); Модуль: System

Описание: Процедура удаляет все записи в файле, находящиеся после текущей позиции (текущая позиция становится концом файла). Параметр Vf представляет собой файловую переменную, связанную с файлом любого типа, кроме текстовых (данная процедура не работает с текстовыми файлами). При вызове процедуры файл должен быть открыт.

Процедура: Write(Vf, V1. Vn); (для типизированных файлов) Модуль: System

Описание: Процедура записывает данные в типизированный файл. Параметр Vf представляет собой файловую переменную, связанную с типизированным файлом. Тип переменных V1 . Vn должен соответствовать типу фала. При записи в файл очередного компонента, указатель текущей позиции файла передвигается на следующий компонент. Если перед вызовом данной процедуры указатель стоит в конце файла (Eof(Vf)=True), то записываемые данные будут добавлены в конец файла (размер файла соответственно увеличится).

Функция: DeleteFile(const FileName: string): Boolean; Модуль: SysUtils

Описание: Функция удаляет файл с диска. При успешном выполнении возвращает True, а если файл не существует, или не может быть удален, то — False.

Пример:
var
FileName: string;
begin
.
if DeleteFile(FileName) then
MessageDlg('Файла успешно удален', mtInformation, [mbOk], 0)
else
MessageDlg('Ошибка удаления файла', mtInformation, [mbOk], 0);
.
end;

Функция: DiskFree(Drive: Byte): Int64; Модуль: SysUtils

Описание: Функция возвращает количество свободного места на диске, указанном в параметре Drive, в байтах. Диск определяется следующим образом: 0 — текущий, 1 — ‘A’, 2 — ‘B’, 3 — ‘С’, и т.д. Если указанный диск не существует, или недоступен, то функция возвращает -1.

Функция: DiskSize(Drive: Byte): Int64; Модуль: SysUtils

Описание: Функция возвращает размер диска Drive в байтах. Диск определяется следующим образом: 0 — текущий, 1 — ‘A’, 2 — ‘B’, 3 — ‘С’, и т.д. Если указанный диск не существует, или недоступен, то функция возвращает -1.

Функция: Eof(var Vf ): Boolean; Модуль: System

Описание: Функция определяет, стоит ли указатель текущей позиции в конце файла Vf (Vf — файловая переменная). Если указатель стоит на последнем символе файла, или файл не содержит данных, то функция возвращает True, а иначе — False.

Пример:
var
Vf1,Vf2: TextFile;
FileName1, FileName2: string;
C: Char;
begin
FileName1:='read.txt'; //подразумевается, что файл существует
FileName2:='write.txt';
AssignFile(Vf1, FileName1);
Reset(Vf1); //открывает файл 'read.txt'
AssignFile(Vf2, FileName2);
Rewrite(Vf2); //создает файл 'write.txt'
while not Eof(Vf1) do //повтор, пока не достигнут конец файла
begin
Read(Vf1, C); //читает символ из файла 'read.txt'
Write(Vf2, C); //записывает символ в файл 'write.txt'
end;
CloseFile(Vf2);
CloseFile(Vf1);
end;

Функция: FileExists(const FileName: string): Boolean; Модуль: SysUtils

Описание: Функция проверяет, существует ли файл с именем FileName. Если файл существует, то функция возвращает True, иначе — False.

Функция: FileGetAttr(const FileName: string): Integer; Модуль: SysUtils

Описание: Функция возвращает атрибуты файла, имя которого передано в параметре FileName. Атрибуты могут быть разделены с помощью оператора AND и следующих значений констант атрибутов:

Константа Значение Описание
faReadOnly faHidden faSysFile faVolumeID faDirectory faArchive faAnyFile $00000001 $00000002 $00000004 $00000008 $00000010 $00000020 $00000003F Только чтение Скрытый файл Системный файл Идентификатор тома Каталог Архивный файл Произвольный файл

В случае возникновении ошибки функция возвращает -1.

Функция: FilePos(var Vf): LongInt; Модуль: System

Описание: Функция возвращает текущую позицию указателя в файле (файл должен быть предварительно открыт). Параметр Vf представляет собой файловую переменную, ассоциированную с файлом. Данная функция не может быть применена к текстовым файлам.

Пример:
var
Vf: File of Byte;
S : string;
Size, I: Integer;
begin
Randomize; AssignFile(Vf, 'work.dat');
Rewrite(Vf); //создает файл work.dat
for I:= 0 to 100 do
begin
Seek(Vf, I);
Write(Vf, I); //записывает в файл послед. чисел от 1 до 100
end;
Size:= FileSize(Vf); //определяет размер файла
Seek(Vf, random(Size)); //устанавливает указатель в произвольную позицию
MessageDlg('Позиция указателя: ' + IntToStr(FilePos(Vf)), mtInformation, [mbOk], 0);
.
CloseFile(Vf);
end;

Функция: FileSearch(const FileName, DirList: string): string; Модуль: SysUtils

Описание: Функция осуществляет поиск файла FileName в каталогах, указанных в параметре DirList. Имя файла должно быть представлено в DOS-формате. Список каталогов DirList представляет собой строку, содержащую наименования каталогов, разделенных точками с запятой (например, ‘C:\;C:\WINDOWS; C:\WINDOWS\TEMP’). Если файл найден, то функция возвращает полный путь к файлу, а иначе возвращается пустая строка.

Функция: FileSetAttr(const FileName: string): Integer; Модуль: SysUtils

Описание: Функция устанавливает атрибуты файла, имя которого передано в параметре FileName. Атрибуты перечисляются в параметре Attr с помощью оператора OR. В случае успешного выполнения функция возвращает 0, а иначе возвращается код ошибки Windows.
Значение констант атрибутов:

Константа Значение Описание
faReadOnly faHidden faSysFile faVolumeID faDirectory faArchive faAnyFile $00000001 $00000002 $00000004 $00000008 $00000010 $00000020 $00000003F Только чтение Скрытый файл Системный файл Идентификатор тома Каталог Архивный файл Произвольный файл

Пример:для файла устанавливаются атрибуты ‘Скрытый файл’ и ‘Только чтение’.
FileSetAttr('MyFile.zzz', faReadOnly or faHidden);

Функция: FileSize(var Vf): Integer; Модуль: System

Описание: Функция возвращает размер файла, связанного с файловой переменной Vf в байтах. Для файлов типа Record функция возвращает количество записей. Если файл не содержит данных, то функция возвращает 0. Файл должен быть обязательно открыт. Данная функция не применима к текстовым файлам.

Описание: Функция находит файл с набором атрибутов Attr в каталоге и по маске, определенных константой Path. Найденное имя файла записывается в переменную F. Если указанный файл найден, то функция возвращает 0, иначе возвращается код ошибки Windows. Параметр Attr — комбинация нескольких констант атрибутов файла или их значений. Константа Path представляет собой полный путь с маской файла (например, ‘C:\MYDIR\*.ini’ ). Повторный поиск файла производится с помощью функции FindNext. По окончанию поиска необходимо высвободить память, выделенную при вызове функции FindFirst, с помощью процедуры FindClose. Значение констант атрибутов:

Константа Значение Описание
faReadOnly faHidden faSysFile faVolumeID faDirectory faArchive faAnyFile $00000001 $00000002 $00000004 $00000008 $00000010 $00000020 $00000003F Только чтение Скрытый файл Системный файл Идентификатор тома Каталог Архивный файл Произвольный файл

Описание: Функция используется в цепочке FindFirst - FindNext - FindClose для повторного поиска файла. Первый поиск осуществляется с помощью функции FindFirst. Функция FindNext возвращает следующий найденный файл, удовлетворяющий условиям поиска определенным при вызове функции FindFirst. В случае успешного выполнения, функция FindNext возвращает 0, а в случае возникновения ошибки — код ошибки Windows. По окончанию поиска необходимо высвободить память с помощью функции FindClose.

Функция: IOResult: Integer; Модуль: System

Описание: Функция возвращает статус ошибки последней выполненной операции ввода/вывода. Использование данной функции возможно только при отключенной проверке ошибок директивой компилятора <$I->. При возникновении ошибки ввода/вывода, все последующие операции ввода/вывода будут игнорироваться до тех пор, пока не будет сделано обращение к функции IOResult. Вызов IOResult очищает внутренний флаг ошибки. Альтернативным способом обработки ошибок ввода/вывода является использование механизма обработки исключительных ситуаций, который включается директивой компилятора <$I+>.

Функция: RenameFile(const OldName, NewName: string): Boolean; Модуль: SysUtils

Описание: Функция переименовывает файл OldName в NewName. При успешном выполнении возвращает True, а в случае ошибки False.

Пример:
begin
if RenameFile('OLD.TXT', 'NEW.TXT') then
MessageDlg(Файл переименован!', mtInformation, [mbOk], 0)
else
ErrorMsg('Невозможно переименовать файл!');
end;

| следующая лекция ==>
Современные способы и средства тушения пожаров | Работа с текстовыми файлами

Дата добавления: 2014-01-07 ; Просмотров: 870 ; Нарушение авторских прав? ;

Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет

Файловые функции DELPHI. Файловые операции средствами ShellApi.

В Delphi существует понятие — подпрограммы управления файлами ( category File management routines). Процедуры и функции входящие в эту категорию находятся в модулях System, SysUtils (каталог Source\Rtl\Sys) и FileCtrl (каталог Source\Vcl). Модуль FileCtrl содержит только две функции из категории подпрограмм управления файлами — это DirectoryExists и ForceDirectories. Местонахождение остальных процедур и функций определяется следующим образом. Если в подпрограмме используется файловая переменная, то она входит в модуль System. Если дескриптор или имя файла в виде строки, то в модуль SysUtils. Правда есть исключения (интуитивно понятные) ChDir входит в System. Также в System входят MkDir, RmDir из категории ввода/вывода ( I/O routines). Надо отметить, что все подпрограммы, отнесенные к категориям ввода/вывода и текстовых файлов ( Text file routines) находятся в модуле System (исключая процедуру AssignPrn входящую в модуль Printers каталог Source\Vcl). Вот список подпрограмм отсортирован по категориям и по алфавиту.

File management routines — подпрограммы управления файлами

S ystem procedure AssignFile(var F; FileName: string); Связывает файловую переменную с именем файла
System procedure ChDir(S: string); Изменяет текущий каталог
System procedure CloseFile(var F); Закрывает файл по файловой переменной
SysUtils function CreateDir(const Dir: string): Boolean; Создает новый каталог
SysUtils function DeleteFile(const FileName: string): Boolean; Удаляет файл
FileCtrl function DirectoryExists(Name: string): Boolean; Проверяет наличие каталога
SysUtils function DiskFree(Drive: Byte): Int64; Определяет свободное пространство на диске
SysUtils function DiskSize(Drive: Byte): Int64; Определяет полный размер диска
SysUtils function FileAge(const FileName: string): Integer; Определяет время последнего обновления
SysUtils procedure FileClose(Handle: Integer); Закрывает файл по дескриптору
SysUtils function FileDateToDateTime(FileDate: Integer): TDateTime; Преобразует DOS-дату в Delphi-дату
SysUtils function FileExists(const FileName: string): Boolean; Проверяет наличие файла
SysUtils function FileGetAttr(const FileName: string): Integer; Определяет атрибуты файла
SysUtils function FileGetDate(Handle: Integer): Integer; Определяет время последнего обновления
SysUtils function FileOpen(const FileName: string; Mode: LongWord): Integer; Открывает существующий файл
SysUtils function FileRead(Handle: Integer; var Buffer; Count: Integer): Integer; Читает из файла
SysUtils function FileSearch(const Name, DirList: string): string; Ищет файл в списке каталогов
SysUtils function FileSeek(Handle, Offset, Origin: Integer): Integer; Меняет позицию указателя
SysUtils function FileSetAttr(const FileName: string; Attr: Integer): Integer; Устанавливает атрибуты файла
SysUtils function FileSetDate(Handle: Integer; Age: Integer): Integer; Устанавливает время последнего обновления
SysUtils function FileWrite(Handle: Integer; const Buffer; Count: Integer): Integer; Записывает в файл
SysUtils procedure FindClose(var F: TSearchRec); Прекращает поиск файлов
SysUtils function FindFirst(const Path: string; Attr: Integer; var F: TSearchRec): Integer; Начинает поиск файлов
SysUtils function FindNext(var F: TSearchRec): Integer; Продолжает поиск файлов
FileCtrl function ForceDirectories(Dir: string): Boolean; Создает все каталоги пути
SysUtils function GetCurrentDir: string; Определяет текущий каталог
System procedure GetDir(D: Byte; var S: string); Определяет текущий каталог
SysUtils function RemoveDir(const Dir: string): Boolean; Удаляет каталог
SysUtils function RenameFile(const OldName, NewName: string): Boolean; Переименовывает файл
SysUtils function SetCurrentDir(const Dir: string): Boolean; Устанавливает текущий каталог

I/O routines — подпрограммы ввода/вывода

Модуль Подпрограмма
System procedure Append(var F: Text); Добавляет текст в конец файла
System procedure BlockRead(var F: File; var Buf; Count: Integer [; var AmtTransferred: Integer]); Читает блок из файла
System procedure BlockWrite(var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]); Записывает блок в файл
System function Eof(var F): Boolean; Определяет конец файла
System function FilePos(var F): Longint; Определяет позицию указателя
System function FileSize(var F): Integer; Определяет размер файла
System function IOResult: Integer; Определяет ошибки предыдущего ввода/вывода
System procedure MkDir(S: string); Создает каталог
System procedure Rename(var F; Newname:string); Переименовывает файл
System procedure Reset(var F [: File; RecSize: Word ] ); Открывает файл
System procedure Rewrite(var F: File [; Recsize: Word ] ); Создает и открывает новый файл
System procedure RmDir(S: string); Удаляет каталог
System procedure Seek(var F; N: Longint); Устанавливает позицию указателя
System procedure Truncate(var F); Усекает файл до текущей позиции указателя

Text file routines — подпрограммы текстовых файлов

Модуль Подпрограмма
Printers procedure AssignPrn(var F: Text); Связывает файловую переменную с принтером
System function Eoln [(var F: Text) ]: Boolean; Определяет конец строки
System procedure Erase(var F); Удаляет файл
System procedure Flush(var F: Text); Переписывает данные в файл из его буфера
System procedure Read(F , V1 [, V2. Vn ] ); Читает из файла
System procedure Readln([ var F: Text; ] V1 [, V2, . Vn ]); Читает из файла до конца строки
System function SeekEof [ (var F: Text) ]: Boolean; Определяет конец файла
System function SeekEoln [ (var F: Text) ]: Boolean; Определяет конец строки
System procedure SetTextBuf(var F: Text; var Buf [ ; Size: Integer] ); Устанавливает новый буфер
System procedure Write(F, V1 [, V2. Vn ] ); Записывает в файл
System procedure Writeln([ var F: Text; ] V1 [, V2, . Vn ] ); Записывает в файл с концом строки

Проверяем наличие файла и записываем его
type
TFileData=record
Name:String[10];
ExtDat:Extended;
end;
var
Cals: File of TFileData;
CalsData: TFileData;

procedure NAME;
//Описание процедуры
var p: Real;
u: Byte;
begin
Road:=’<файл>.dat’;
Dest:=’<каталог>‘+Road;
try
AssignFile(Cals,Dest);
// Если файл существует открываем на чтение, иначе создаем новый
If FileExists(Cals) then Reset(cals) else Rewrite(cals);
// установим позицию чтения в конец файла
seek (cals,filesize(cals));
CalsData.Name := ‘название параметра’;
CalsData.ExtDat := <сами данные>;
Write(Cals,CalsData);
except
on E: EInOutError do
ShowMessage(‘При выполнении файловой операции возникла ошибка’+
‘ № ‘+ IntToStr(E. ErrorCode)+’: ‘+SysErrorMessage(GetLastError));
on E: EAccessViolation do
ShowMessage(‘Ошибка!: ‘+SysErrorMessage(GetLastError));
end;
CloseFile(cals); //Независимо от того что произошло выше закрываем открытый файл
end;

Перепишем файл a.dat в файл b.dat, удалив признаки конца файла:

Proedure MyWrite;
var
f1,f2 :file of Byte;
a :Byte;
i :Longint;
begin
<$I->
AssignFile(f1, ‘a.dat’);
AssignFile(f2, ‘b.dat’);
Reset(f1);
Rewrite(f2);
for i := 1 to FileSize(f1) do
begin
Read(f1, a);
if a <> 26 then Write(f2, a);
end;
CloseFile(f1);
CloseFile(f2);
end.

Файл записей. Пишем и читаем любую:

Procedure MyBook;
type TR=Record
Name:string[100];
Age:Byte;
Income:Real;
end;
var f:file of TR;
r:TR;
begin
//assign file
assignFile(f, ‘MyFileName’);
//open file
if FileExists(‘MyFileName’) then
reset(f)
else
rewrite(f);
//чтение 10й записи
seek(f,10);
read(f,r);
//запись 20й записи
seek(f, 20);
write(f,r);
closefile(f);
end;

Файловые операции средствами ShellAPI.


Автор: Владимир Татарчевский

Рассмотрим применение функции SHFileOperation.
function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
Функция позволяет производить копирование, перемещение, переименование и удаление (в том числе и в Recycle Bin) объектов файловой системы.
Функция возвращает 0, если операция выполнена успешно, и ненулевое значение в противном случае.

Функция имеет единственный аргумент — структуру типа TSHFileOpStruct, в которой и передаются все необходимые данные. Эта структура выглядит следующим образом:

_SHFILEOPSTRUCTA = packed record
Wnd: HWND;
wFunc: UINT;
pFrom: PAnsiChar;
pTo: PAnsiChar;
fFlags: FILEOP_FLAGS;
fAnyOperationsAborted: BOOL;
hNameMappings: Pointer;
lpszProgressTitle: PAnsiChar; < используется только при установленном флаге FOF_SIMPLEPROGRESS >
end;

Поля структуры имеют следующее назначение:
hwnd Хэндл окна, на которое будут выводиться диалоговые окна о ходе операции.
wFunc Требуемая операция. Может принимать одно из значений:

FO_COPY Копирует файлы, указанные в pFrom в папку, указанную в pTo.
FO_DELETE Удаляет файлы, указанные pFrom (pTo игнорируется).
FO_MOVE Перемещает файлы, указанные в pFrom в папку, указанную в pTo.
FO_RENAME Переименовывает файлы, указанные в pFrom.
pFrom — указатель на буфер, содержащий пути к одному или нескольким файлам. Если файлов несколько, между путями ставится нулевой байт. Список должен
заканчиваться двумя нулевыми байтами.

pTo — аналогично pFrom, но содержит путь к директории — адресату, в которую производится копирование или перемещение файлов. Также может
содержать несколько путей. При этом нужно установить флаг FOF_MULTIDESTFILES.

fFlags — управляющие флаги.
FOF_ALLOWUNDO Если возможно, сохраняет информацию для возможности UnDo.
FOF_CONFIRMMOUSE Не реализовано.
FOF_FILESONLY Если в поле pFrom установлено *.*, то операция будет производиться только с файлами.
FOF_MULTIDESTFILES Указывает, что для каждого исходного файла в поле pFrom указана своя директория — адресат.
FOF_NOCONFIRMATION Отвечает «yes to all» на все запросы в ходе опеации.
FOF_NOCONFIRMMKDIR Не подтверждает создание нового каталога, если операция требует, чтобы он был создан.
FOF_RENAMEONCOLLISION В случае, если уже существует файл с данным именем, создается файл с именем «Copy #N of. »
FOF_SILENT Не показывать диалог с индикатором прогресса.
FOF_SIMPLEPROGRESS Показывать диалог с индикатором прогресса, но не показывать имен файлов.
FOF_WANTMAPPINGHANDLE Вносит hNameMappings элемент. Дескриптор должен быть освобожден функцией SHFreeNameMappings.
fAnyOperationsAborted
Принимает значение TRUE если пользователь прервал любую файловую операцию до ее завершения и FALSE в ином случае.

hNameMappings — дескриптор объекта отображения имени файла, который содержит массив структур SHNAMEMAPPING. Каждая структура содержит старые и новые имена пути для каждого файла, который перемещался, был скопирован, или переименован. Этот элемент используется только, если установлен флаг FOF_WANTMAPPINGHANDLE.

lpszProgressTitle — указатель на строку, используемую как заголовок для диалогового окна прогресса. Этот элемент используется только, если установлен флаг FOF_SIMPLEPROGRESS.

Примечание. Если pFrom или pTo не указаны, берутся файлы из текущей директории. Текущую директорию можно установить с помощью функции
SetCurrentDirectory и получить функцией GetCurrentDirectory.

Добавьте в секцию uses модуль ShellAPI, в котором определена функция SHFileOperation.

procedure TForm1.Button1Click(Sender: TObject);
var
SHFileOpStruct : TSHFileOpStruct;
From : array [0..255] of Char;
begin
SetCurrentDirectory( PChar( ‘C:\’ ) );
From := ‘Test1.tst’ + #0 + ‘Test2.tst’ + #0 + #0;
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_DELETE;
pFrom := @From;
pTo := nil;
fFlags := 0;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
SHFileOperation( SHFileOpStruct );
end;

Ни один из флагов не установлен. Если вы хотите не просто удалить файлы, а переместить их в корзину, должен быть
установлен флаг FOF_ALLOWUNDO.

Напишем функцию, создающую из массива строк буфер для передачи его в качестве параметра pFrom. После
каждой строки в буфер вставляется нулевой байт, в конце списка — два нулевых байта.
type TBuffer = array of Char;

procedure CreateBuffer( Names : array of string; var P : TBuffer );
var I, J, L : Integer;
begin
for I := Low( Names ) to High( Names ) do
begin
L := Length( P );
SetLength( P, L + Length( Names[ I ] ) + 1 );
for J := 0 to Length( Names[ I ] ) — 1 do
P[ L + J ] := Names[ I, J + 1 ];
P[ L + J ] := #0;
end;
SetLength( P, Length( P ) + 1 );
P[ Length( P ) ] := #0;
end;

Функция, удаляющая файлы, переданные ей в списке Names. Параметр ToRecycle определяет, будут ли файлы перемещены в корзину или удалены. Функция возвращает 0, если операция выполнена успешно, и ненулевое значение, если функции переданы имена несуществующих файлов.
function DeleteFiles( Handle : HWnd; Names : array of string; ToRecycle : Boolean ) : Integer;
var
SHFileOpStruct : TSHFileOpStruct;
Src : TBuffer;
begin
CreateBuffer( Names, Src );
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_DELETE;
pFrom := Pointer( Src );
pTo := nil;
fFlags := 0;
if ToRecycle then fFlags := FOF_ALLOWUNDO;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
Src := nil;
end;

Освобождаем буфер Src простым присваиванием значения nil. Потери памяти при этом не происходит, происходит корректное уничтожение динамического массива.

Проверяем :
procedure TForm1.Button1Click(Sender: TObject);
begin
DeleteFiles( Handle, [ ‘C:\Test1’, ‘C:\Test2’ ], True );
end;

Файлы ‘Test1’ и ‘Test2’ удаляются совсем, без помещения в корзину, несмотря на установленный флаг FOF_ALLOWUNDO. При использовании функции SHFileOperation используйте полные пути, когда это возможно.

Копирование и перемещение.

Функция перемещает файлы указанные в списке Src в директорию Dest. Параметр Move определяет, будут ли файлы перемещаться или копироваться. Параметр AutoRename указывает, переименовывать ли файлы в случае конфликта имен.
function CopyFiles( Handle : Hwnd; Src : array of string; Dest : string; Move : Boolean; AutoRename : Boolean ) : Integer;
var
SHFileOpStruct : TSHFileOpStruct;
SrcBuf : TBuffer;
begin
CreateBuffer( Src, SrcBuf );
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_COPY;
if Move then wFunc := FO_MOVE;
pFrom := Pointer( SrcBuf );
pTo := PChar( Dest );
fFlags := 0;
if AutoRename then fFlags := FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
SrcBuf := nil;
end;

Выполнение:
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFiles( Handle, [ ‘C:\Test1’, ‘C:\Test2’ ], ‘C:\Temp’, True, True );
end;

Переименование.
function RenameFiles( Handle : HWnd; Src : string; New : string; AutoRename : Boolean ) : Integer;
var SHFileOpStruct : TSHFileOpStruct;
begin
with SHFileOpStruct do
begin
Wnd := Handle;
wFunc := FO_RENAME;
pFrom := PChar( Src );
pTo := PChar( New );
fFlags := 0;
if AutoRename then fFlags := FOF_RENAMEONCOLLISION;
fAnyOperationsAborted := False;
hNameMappings := nil;
lpszProgressTitle := nil;
end;
Result := SHFileOperation( SHFileOpStruct );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
RenameFiles( Handle, ‘C:\Test1’ , ‘C:\Test3’ , False );
end;

Илон Маск рекомендует:  Что такое код snmpwalk
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL