|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
вырезать из файла первые 127 байт
Нужно как то вырезать из файла первые 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
|
||||
|
||||
Да ладно (exe всего 14Кб)
Код:
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, устанавливающий размер записываемого файла и предотвращающий тем самым его фрагментацию.
|