![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прошу помощи !!!!! [D5, Win2k]
Gari © (2002-05-14 14:43:00)Уважаемые господа у меня возникла такая проблема, мне нужно открыть на редактирование файл размером 2 Гб, FAR открыть не может. Подскажите пожалуйста какие программы могут это сделать.
Игорь Шевченко (2002-05-14 16:02:00) [1]День добрый, Gari,
> , все пошло
Куда ? :-))
Gari (2002-05-14 15:52:00) [2]Огромное человеческре спасибо, все пошло.
Alx2 (2002-05-14 15:49:00) [3]Ради третьего байта?
А в общем случае частями, хотя MMF функции, кажется, позволяют 64-битную арифметику использовать. Но тогда 64-битную операционку ждать надо...
Виктор Щербаков (2002-05-14 15:36:00) [4]Я ж говорил, что частями надо проецировать.
Alx2 (2002-05-14 15:34:00) [5]>Игорь Шевченко © (14.05.02 15:31)
И то верно :(
Alx2 (2002-05-14 15:31:00) [6]Да, в моем примере он октрывается только на чтение. Чтобы и писать смог, надо флаги поправить....
Игорь Шевченко (2002-05-14 15:31:00) [7]День добрый, Alx2,
У автора размер файла больше 2 Гб :-)
С уважением,
Alx2 (2002-05-14 15:29:00) [8]>Игорь Шевченко © (14.05.02 15:24)
Блин, а про 3-й байт я и не прочитал 8-)
Alx2 (2002-05-14 15:27:00) [9]Вот примеры из моей старой проги:
Type
TMapFileStruct =
Record
FileHandle, FileMap: THandle;
PointerFile: Pointer;
MaxPointer: Pointer;
isAssigned: Boolean;
End;
Function OpenFileMap(Const Filename: String; Var MapStruct: TMapFileStruct): Pointer;
Begin
fillchar(MapStruct, SizeOf(MapStruct), 0);
With MapStruct Do
Begin
FileHandle := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ,
Nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
If FileHandle <> INVALID_HANDLE_VALUE Then
Begin
FileMap := CreateFileMapping(FileHandle, Nil, PAGE_READONLY, 0, 0, Nil);
If FileMap <> 0 Then
Begin
PointerFile := MapViewOfFile(FileMap, FILE_MAP_READ, 0, 0, 0);
If PointerFile = Nil Then
Begin
CloseHandle(FileMap);
CloseHandle(FileHandle);
End
Else
Integer(MaxPointer) := Integer(PointerFile) + Integer(GetFileSize(FileHandle, Nil));
End
Else
CloseHandle(FileHandle);
End;
Result := PointerFile;
isAssigned := PointerFile <> Nil;
End;
End;
Procedure CloseFileMap(Var MapStruct: TMapFileStruct);
Begin
With MapStruct Do
Begin
If Not isAssigned Then exit;
If PointerFile <> Nil Then UnmapViewOfFile(PointerFile);
CloseHandle(FileMap);
CloseHandle(FileHandle);
isAssigned := False;
End;
End;
Функция OpenFileMap(Const Filename: String; Var MapStruct: TMapFileStruct): Pointer возвращает указатель на область виртуальной памяти, в которой теперь покоится наш файл. Работать с этой областью можно теперь как с массивом, например.
Игорь Шевченко (2002-05-14 15:24:00) [10]День добрый, Gari,
Лень замучила ?
var
FD : Integer;
ThirdByte : Byte;
begin
FD := FileOpen("yourfile.dmp", fmOpenReadWrite);
if FD = -1 then
Exit;
ThirdByte := то_что_надо;
FileSeek(FD, 3, 0);
FileWrite(FD, ThirdByte, 1);
FileClose(FD);
end;
С уважением,
Gari (2002-05-14 15:14:00) [11]Мне в dmp надо изменить третий байт так что SQL тут не помошник (все это нужно для перекодировки базы)
Gari (2002-05-14 15:13:00) [12]Напишите кто нибудь, прошу каким макаром это все делается.
Игорь Шевченко (2002-05-14 15:12:00) [13]День добрый, Gari,
Очевидно, TFM читать...Называется Win32.hlp, разделы
CreateFileMapping, MapViewOfFile
Либо не мучаться, а написать программку работы с файлом, заменяющую все, что надо в неинтерактивном режиме. Либо дамп восстановить и средствами SQL внести необходимые исправления :-)
С уважением,
Виктор Щербаков (2002-05-14 15:10:00) [14]Насчет MMF, проецировать можно (а в данном случае нужно) не весь файл, а только его часть.
Gari (2002-05-14 15:08:00) [15]Мужики все конечно хорошо, но что мне с этой командой делать (или это не команда). Пожалуйста помогите.
Игорь Шевченко (2002-05-14 15:04:00) [16]День добрый, Gari,
RichEdit не спасет :-)))
Memory mapped files, иначе никак...
А для 2 Гб файла адресного простанства не хватит, в буфер закачивать :-)
С уважением,
Gari (2002-05-14 15:00:00) [17]Тогда поделись пожалуйста советом каким образом мне Oracle файл с расширением dmp, запихать в Richedit. За ранее огромное человеческое спасибо.
Song (2002-05-14 14:56:00) [18]Уверен. Тем более под w2k
Gari (2002-05-14 14:53:00) [19]А ты уверен что 2 Гб для него не проблема.
Song (2002-05-14 14:51:00) [20]Напиши такую программу сам. TRichEdit может.