Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
ВнизПрошу помощи !!!!! Найти похожие ветки
← →
Gari (2002-05-14 14:43) [0]Уважаемые господа у меня возникла такая проблема, мне нужно открыть на редактирование файл размером 2 Гб, FAR открыть не может. Подскажите пожалуйста какие программы могут это сделать.
← →
Alx2 (2002-05-14 14:49) [1]Windows.
Memory mapped files :)
← →
Song (2002-05-14 14:51) [2]Напиши такую программу сам. TRichEdit может.
← →
Gari (2002-05-14 14:53) [3]А ты уверен что 2 Гб для него не проблема.
← →
Song (2002-05-14 14:56) [4]Уверен. Тем более под w2k
← →
Gari (2002-05-14 15:00) [5]Тогда поделись пожалуйста советом каким образом мне Oracle файл с расширением dmp, запихать в Richedit. За ранее огромное человеческое спасибо.
← →
Игорь Шевченко (2002-05-14 15:04) [6]День добрый, Gari,
RichEdit не спасет :-)))
Memory mapped files, иначе никак...
А для 2 Гб файла адресного простанства не хватит, в буфер закачивать :-)
С уважением,
← →
Gari (2002-05-14 15:08) [7]Мужики все конечно хорошо, но что мне с этой командой делать (или это не команда). Пожалуйста помогите.
← →
Виктор Щербаков (2002-05-14 15:10) [8]Насчет MMF, проецировать можно (а в данном случае нужно) не весь файл, а только его часть.
← →
Игорь Шевченко (2002-05-14 15:12) [9]День добрый, Gari,
Очевидно, TFM читать...Называется Win32.hlp, разделы
CreateFileMapping, MapViewOfFile
Либо не мучаться, а написать программку работы с файлом, заменяющую все, что надо в неинтерактивном режиме. Либо дамп восстановить и средствами SQL внести необходимые исправления :-)
С уважением,
← →
Gari (2002-05-14 15:13) [10]Напишите кто нибудь, прошу каким макаром это все делается.
← →
Gari (2002-05-14 15:14) [11]Мне в dmp надо изменить третий байт так что SQL тут не помошник (все это нужно для перекодировки базы)
← →
Игорь Шевченко (2002-05-14 15:24) [12]День добрый, 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;
С уважением,
← →
Alx2 (2002-05-14 15:27) [13]Вот примеры из моей старой проги:
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 возвращает указатель на область виртуальной памяти, в которой теперь покоится наш файл. Работать с этой областью можно теперь как с массивом, например.
← →
Alx2 (2002-05-14 15:29) [14]>Игорь Шевченко © (14.05.02 15:24)
Блин, а про 3-й байт я и не прочитал 8-)
← →
Игорь Шевченко (2002-05-14 15:31) [15]День добрый, Alx2,
У автора размер файла больше 2 Гб :-)
С уважением,
← →
Alx2 (2002-05-14 15:31) [16]Да, в моем примере он октрывается только на чтение. Чтобы и писать смог, надо флаги поправить....
← →
Alx2 (2002-05-14 15:34) [17]>Игорь Шевченко © (14.05.02 15:31)
И то верно :(
← →
Виктор Щербаков (2002-05-14 15:36) [18]Я ж говорил, что частями надо проецировать.
← →
Alx2 (2002-05-14 15:49) [19]Ради третьего байта?
А в общем случае частями, хотя MMF функции, кажется, позволяют 64-битную арифметику использовать. Но тогда 64-битную операционку ждать надо...
← →
Gari (2002-05-14 15:52) [20]Огромное человеческре спасибо, все пошло.
← →
Игорь Шевченко (2002-05-14 16:02) [21]День добрый, Gari,
> , все пошло
Куда ? :-))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.05.23;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.007 c