Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.006 c
4-73457
AlexMey
2002-03-19 15:00
2002.05.23
Копирование файлов по сети.


7-73410
Dmitry V. Averuanov
2002-02-25 18:47
2002.05.23
Как выключить ATX под DOS-ом ?


6-73322
Malder
2002-03-10 13:12
2002.05.23
Как сделать редирект ?


1-73101
IgoX
2002-05-09 19:57
2002.05.23
Проблема с клавишей


1-73319
Startwar
2002-05-12 00:53
2002.05.23
Проблема с MDI формами





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский