Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Прошу помощи !!!!! [D5, Win2k]


Страницы:   1 2

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 может.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо