Для Delphi есть ещё два варианта этой функции, которые
отличаются только типом переменных. Эти функции имеют имена
CreateFileA и CreateFileW. Я не буду их приводить, просто
запомни, что в функциях с буквой А вконце все переменные
типа PChar превращаются в AnsiChar, а с префиксом W переменные
PChar превращаются в WideString.
В принципе, практически для всех API функций в Delphi доступно
два дополнительных варианта, в которых действует описанное
выше правило. Так что я больше не буду к этому возвращаться.
Если произошла ошибка, то функция вернёт INVALID_HANDLE_VALUE.

Например: DeleteFile('d:\fo.bmp');
Найти файл:
function FindFirstFile(lpFileName:PChar,varIpFileFindData:_WIN32_FIND_DATAA):Cardinal;
FindNextFile(hFindFile:Cardinal,var IpFileFindData:_WIN32_FIND_DATAA):
LongBool;
FindClose(hFindFile:Cardinal):Boolean;
lpFileName указатель на имя файла
IpFileFindData указатель на структуру _WIN32_FIND_DATAA
Например:
procedure TForm1.Button2Click(Sender: TObject);
var SearhH:HWND;
FData:_WIN32_FIND_DATAA;
begin
SearhH:=FindFirstFile('D:\Музыка\*.mp3',FData);
listbox1.Items.Add(FData.cFileName);
if SearhH<>0 then begin
repeat
findnextfile(SearhH,FData);
listbox1.Items.Add(FData.cFileName );
until findnextfile(SearhH,FData)=false;
end;
FindClose(SearhH);
end;
Свободное место на диске:
function GetDiskFreeSpace(lpRootPathName:PChar, var lpSectorsPerCluster:Cardinal,
var lpBytesPerSector:Cardinal, var lpNumberOfFreeClusters:Cardinal,
var lpTotalNumberOfClusters:Cardinal):LongBool;
Параметры:
lpRootPathName Указатель на имя диска
lpSectorsPerCluster Указатель на количество секторов на
кластер
lpBytesPerSector Указатель на количество байт на секторов
lpNumberOfFreeClusters Указатель на количество свободных
секторов
lpTotalNumberOfClusters Указатель на общее количество секторов
Например:
procedure TForm1.Button1Click(Sender: TObject);
var FC,SPC,BPS,NC:DWORD;
begin
if GetDiskFreeSpace('C:\',SPC,BPS,FC,NC) then
Label1.Caption:='Свободнго места на диске '+IntToStr(SPC*FC*BPS)+'
Байт';
end;
Определение типа диска:
function GetDriveType(lpRootPathName:PChar):Cardinal;
Прааметры:
lpRootPathName Указатель на имя диска
Например:
procedure TForm1.Button1Click(Sender: TObject);
var Drive:PChar;
begin
Drive:='F:\';
case GetDriveType(Drive) of
0:label1.Caption:='Тип дисковода не может быть определен.';
1:label1.Caption:='Такого диска не существует.';
2:label1.Caption:='Floppy или Zip дисковод.';
3:label1.Caption:='Это жесткий диск.';
4:label1.Caption:='Сетевой диск.';
5:label1.Caption:='Дисковод CD-ROM.';
6:label1.Caption:='Дисковод RАМ.';
end;
end;
Получить атрибуты файла:
function GetFileAttributes(lpFileName:PChar):Cardinal;
Параметры:
lpFileName указатель на имя файла
Например:
procedure TForm1.Button1Click(Sender: TObject);
begin
case GetFileAttributes('d:\blood.exe') of
1:label1.Caption:='Только для чтения';
2:label1.Caption:='Скрытый';
3:label1.Caption:='Только для чтения и Скрытый';
32:label1.Caption:='Архивный';
33:label1.Caption:='Только для чтения и Архивный';
34:label1.Caption:='Архивный и Скрытый';
35:label1.Caption:='Только для чтения и Архивный и Скрытый';
end;
end; 
Перемещение файла:
function MoveFile(lpExistingFileName:PChar, lpNewFileName:PChar):LongBool;
Параметры:
lpExistingFileName указатель на имя файла
lpNewFileName указатель на новое имя файла
Например:
MoveFile('d:\blood.exe','c:\program files\blood.exe');
Удаление папки:
function RemoveDirectory(lpPathName:PChar):LongBool;
Параметры:
lpPathName указатель на имя папки
Например:
RemoveDirectory('d:\Games')
Примечание: Удаляет только пустые папки.
Установить текущую папку:
function SetCurrentDirectory(lpPathName:PChar);
Параметры:
lpPathName указатель на имя папки
Например: SetCurrentDirectory('d:\bonus');
Установить аттрибуты файла:
function SetFileAttributes(lpFileName:PChar, dwFileAttributes:Cardinal):LongBool;
Параметры:
lpFileName указатель на имя файла
dwFileAttributes Аттрибут файла
Может иметь значение:
FILE_ATTRIBUTE_ARCHIVE Архивный
FILE_ATTRIBUTE_HIDDEN Скрытый
FILE_ATTRIBUTE_NORMAL Без аттрибутов
FILE_ATTRIBUTE_OFFLINE Как написано в хелпе: Указывает,
что файловые данные физически перемещены на offline память.
8-[
FILE_ATTRIBUTE_READONLY Только чтение
FILE_ATTRIBUTE_SYSTEM Системный
FILE_ATTRIBUTE_TEMPORARY Временный файл
Например: SetFileAttributes('d:\blood.exe',FILE_ATTRIBUTE_HIDDEN);
Получить размер файла:
function GetFileSize(hfile:Cardinal; lpFileSizeHigh:Pointer):Cardinal;
Параметры:
hfile Хэндл файла. Хэндл создается функцией CreateFile.
lpFileSizeHug Указатель на переменную которая будет содержать
старший байт размера файла. Кажется что-то вроде этого ;-)
Я ставил 0 все работает.
Например:
procedure TForm1.Button1Click(Sender: TObject);
var hfile: HWND;
dw: Pointer;
begin
hfile:=CreateFile('C:\Image.bmp'
,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
Label1.Caption:=IntToStr(GetFileSize(hfile,0)
div 1024)+','+(IntToStr(GetFileSize(hfile,0)
mod 1024))+' КБайт';
end;
Получить тип файла:
function GetFileType(hfile:Cardinal):Cardinal;
Параметры:
hfile Хэндл файла. Хэндл создается функцией CreateFile.
Если функция возвращает:
0 то тип файла не изестный (FILE_TYPE_UNKNOWN )
1 обычный файл(дисковый) (FILE_TYPE_DISK)
2 символьный файл, обычно LPT порт или Консоль (FILE_TYPE_CHAR
)
3 Поименованный канал(PIPE) (FILE_TYPE_PIPE )
Например:
procedure TForm1.Button1Click(Sender: TObject);
var hfile:hwnd;
dw:pointer;
begin
hfile:=createfile('C:\Image.bmp' ,GENERIC_READ,0,0,OPEN_EXISTING,0,0);
label1.Caption:=inttostr(GetFileType(hfile));
end;
Получить информацию о диске(имя тома, файловая система):
GetVolumeInformation(
lpRootPathName: PChar,
lpVolumeNameBuffer: PChar,
nVolumeNameSize: Cardinal,
lpVolumeSerialNumber: PDWORD,
lpMaximumComponentLength: Cardinal,
lpFileSystemFlags: Cardinal,
lpFileSystemNameBuffer: PChar,
nFileSystemNameSize:Cardinal
):Lo;
Параметры:
lpRootPathName ........................Имя диска
lpVolumeNameBuffer ................Указатель на имя тома
nVolumeNameSize ....................Длина lpVolumeNameBuffer
lpVolumeSerialNumber .............Указатель на серийный
номер тома
lpMaximumComponentLength ..Максимальная длина имени файла
в системе
lpFileSystemFlags ....................Системные флаги
lpFileSystemNameBuffer ..........Название файловой системы
nFileSystemNameSize ..............Длина lpFileSystemNameBuffer
Например:
procedure TForm1.DriveComboBox1Change(Sender: TObject);
var
VolName: array [0..255] of char;
FSName : array [0..100] of char;
VolSN: PDWORD;
MaxCompLen,FSFlags: Cardinal;
FC,SPC,BPS,NC:DWORD;
s: string;
begin
VolSN:=nil;
s:=UpperCase(DriveComboBox1.Drive)+':\';
Label1.Caption:=s;
if (GetVolumeInformation(PChar(s),VolName,255,
VolSN, MaxCompLen, FSFlags,FSName,100)) then
begin
Label2.Caption:='Имя тома: '+AnsiString(VolName);
Label3.Caption:='Файловая система: '+AnsiString(FSName)
;
end
else
begin
Label2.Caption:='Диск не готов';
Label3.Caption:='';
end;
end;
Прочитать из файла:
function ReadFile(hfile:Cardinal,
var Buffer:Untyped,
nNumberOfBytesToRead:Cardinal,
lpNumberOfBytesRead:Cardinal,
lpOverlapped:POverlapped):LongBool;
Параметры:
hfile....................................Хэндл читаемого
файла Хэндл создается функцией CreateFile.
Buffer.................................Прочитанная информация
nNumberOfBytesToRead....Число читаемых байтов.
lpNumberOfBytesRead.......Указатель на на nNumberOfBytesToRead
lpOverlapped......................Указатель на структуру
Overlapped мона ставить 0.
Например:
procedure TForm1.Button1Click(Sender: TObject);
var hf:hwnd;
buff:array[0..15]of char;
dwBytesRead:dword;
begin
hf:=CreateFile('d:\delphi.txt',
GENERIC_REad,
0,
nil,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
ReadFile(hF, buff, 15, dwBytesRead, nil);
label1.Caption:=buff;
end;
Установить позицию чтения/записи в конец файла:
function SetEndOfFile(hfile:Cardinal):Cardinal;
Параметры:
hfile...............Хэндл файла.
Примера нема, думаю все понятно как ее использовать.
Писать в файл:
function WriteFile(hfile:Cardinal,
var Buffer:Untyped,
nNumberOfBytesToWrite:Cardinal,
lpNumberOfBytesWritten:Cardinal,
lpOverlapped:POverlapped):LongBool;
Параметры:
hfile....................................Хэндл читаемого
файла Хэндл создается функцией CreateFile.
Buffer.................................Прочитанная информация
nNumberOfBytesToWrite....Число читаемых байтов.
lpNumberOfBytesWritten.......Указатель на на nNumberOfBytesToRead
lpOverlapped......................Указатель на структуру
Overlapped мона ставить 0.
Например:
procedure TForm1.Button1Click(Sender: TObject);
var hf:hwnd;
buff:array[0..2]of char;
nobw:dword;
begin
hf:=CreateFile('d:\delphi.txt',
GENERIC_WRITE,
0,
nil,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
0);
buff:='Ok';
Writefile(hf,buff,2,nobw,nil);
end; 