Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.05.23;
Скачать: CL | DM;

Вниз

Прошу помощи !!!!!   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
14-73366
VictorT
2002-04-15 13:39
2002.05.23
Удалили мою ветку про переписочку.


1-73110
UH
2002-05-11 14:58
2002.05.23
D5: траблы с почтой по POP3: summary


14-73396
VID
2002-04-16 13:29
2002.05.23
Какой win200 лучше ?


1-73189
Цикл
2002-05-14 10:23
2002.05.23
Как грамотно прервать работу цикла ?


3-73017
DenNNis
2002-04-26 08:37
2002.05.23
Уважаемые Мастера!