Главная страница
    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.49 MB
Время: 0.007 c
4-73462
sergey_1
2002-03-25 08:04
2002.05.23
Как получить код возврата консольного прилолжения


1-73115
AndreyS
2002-05-13 11:42
2002.05.23
Float points


7-73424
lipskiy
2002-02-25 16:18
2002.05.23
Как предотвратить ошибку EOleSysError для старой версии Shdocvw.dll (то есть, IE)?


1-73206
PShadow
2002-05-14 15:51
2002.05.23
Не могу запустить Excel


4-73474
cok
2002-03-20 18:11
2002.05.23
Отмена удаления





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский