![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Нужно как то вырезать из файла первые 127 байт и создать новый файл, который такой же как и первый, но у него отсутствуют первые 127 байт. С чего начать? Ну или другими словами, скопировать часть файла без первых 127 байт.
|
|
#2
|
||||
|
||||
|
Код:
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
); |
|
#3
|
||||
|
||||
|
Можно конечно и так, но красивее и удобнее это делать через TFileStream:
Код:
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
Var
FSrc,FDst: TFileStream;
StartPos: Int64;
begin
StartPos := 128;
FSrc := TFileStream.Create('C:\SrcFile.txt', fmOpenRead);
FSrc.Position := StartPos;
FDst := TFileStream.Create('C:\DstFile.txt', fmCreate);
FDst.CopyFrom(FSrc, FSrc.Size - StartPos);
FDst.Free;
FSrc.Free;
end. |
|
#4
|
||||
|
||||
|
Тоже самое, но немного по-другому
Код:
procedure cf(Name: string; Pos: integer); var fs: TFileStream; fm: TMemoryStream; begin fs:= TFileStream.Create(Name, fmOpenRead); fs.Position:= Pos; fm:= TMemoryStream.Create; fm.CopyFrom(fs, fs.Size - Pos); fs.Free; fm.SaveToFile(Name); fm.Free; end; |
|
#5
|
||||
|
||||
|
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
Windows;
var
FInputFile, FOutputFile: THandle;
Dummy: DWORD;
Buffer: array [0..$ffff] of Byte;
begin
FInputFile:=CreateFile('Project1.dpr', GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
FOutputFile:=CreateFile('Project1.txt', GENERIC_WRITE, 0, nil, CREATE_ALWAYS, 0, 0);
SetFilePointer(FInputFile, 8, nil, FILE_BEGIN);
while ReadFile(FInputFile, Buffer, Length(Buffer), Dummy, nil) do
if Dummy>0 then WriteFile(FOutputFile, Buffer, Dummy, Dummy, nil) else Break;
CloseHandle(FOutputFile);
CloseHandle(FInputFile);
end. |
| Этот пользователь сказал Спасибо NumLock за это полезное сообщение: | ||
Bargest (18.09.2013)
| ||
|
#6
|
||||
|
||||
|
На самом деле там еще должен стоять вызов SetEndOfFile, устанавливающий размер записываемого файла и предотвращающий тем самым его фрагментацию.
|