Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Замена текста в файле Добавлено: 22.10.04 18:58  

Автор вопроса:  Junior

Ответить

  Ответы Всего ответов: 22  

Номер ответа: 16
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #16
Добавлено: 26.10.04 00:22
Маппинг это уж слишком. С ним можно только через API работать. А вот вставить данные внутрь файла никак нельзя. Можно либо дописать в конец, либо переписать файл по новой. Да и вообще нигде нельзя вставлять данные внутрь, а даже если где то и есть, то это замаскированная перезапись. Ну или база данных, которая вообще по своему устроена.

Ответить

Номер ответа: 17
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #17
Добавлено: 26.10.04 14:36
Расскажите про маппинг (FileMapping functions)! И ещё: как-то слышал, что можно данные не в файл писать, а мимо. В свободные кластеры или даже в свободное место кластера, частично занятого другим файлом. Может у кого пример есть? Как-то же делают операцию Wipe в диск-утилитах!

Ответить

Номер ответа: 18
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #18
Добавлено: 26.10.04 21:17
Как это нельзя, можно все перезаписать... Если размеры данных для записи совпадают с размерами данных подлежащим перезаписи...

Про остаточное место... это да... я тоже слышал... но ничего подобного я не встречал...

Ответить

Номер ответа: 19
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #19
Добавлено: 27.10.04 02:29
Рассказывать ничего не буду. Просто опубликую модуль здесь. Использовать его очень просто.

 Память = MappingBegin(FName$)
 MappingEnd



Option Explicit

Private FileHandle As Long
Private FileMappingHandle As Long
Private FileViewBase As Long

Private Declare Function CreateFile Lib "kernel32" _
   Alias "CreateFileA" ( _
   ByVal lpFileName As String, _
   ByVal dwDesiredAccess As Long, _
   ByVal dwShareMode As Long, _
   ByVal lpSecurityAttributes As Long, _
   ByVal dwCreationDisposition As Long, _
   ByVal dwFlagsAndAttributes As Long, _
   ByVal hTemplateFile As Long _
) As Long

Private Declare Function GetFileSize Lib "kernel32.dll" ( _
     ByVal hFile As Long, _
     ByRef lpFileSizeHigh As Long) As Long

Private Declare Function CreateFileMapping Lib "kernel32" _
   Alias "CreateFileMappingA" ( _
   ByVal hFile As Long, _
   ByVal lpSecurityAttributes As Long, _
   ByVal flProtect As Long, _
   ByVal dwMaximumSizeHigh As Long, _
   ByVal dwMaximumSizeLow As Long, _
   ByVal lpName As String _
) As Long

Private Declare Function MapViewOfFile Lib "kernel32" ( _
   ByVal hFileMappingObject As Long, _
   ByVal dwDesiredAccess As Long, _
   ByVal dwFileOffsetHigh As Long, _
   ByVal dwFileOffsetLow As Long, _
   ByVal dwNumberOfBytesToMap As Long _
) As Long

Private Declare Function CloseHandle Lib "kernel32" ( _
   ByVal hObject As Long) As Long
Private Declare Function UnMapViewOfFile Lib "kernel32" _
   Alias "UnmapViewOfFile" (ByVal lpBaseAddress As Long) As Long

Public Function OpenFile(FileName As String) As Long
Const GENERIC_READ = &H80000000
Const GENERIC_WRITE = &H40000000
Const FILE_SHARE_READ = &H1
Const FILE_SHARE_WRITE = &H2
Const OPEN_EXISTING = 3

' Opens file and gets file handle
FileHandle = CreateFile(FileName, _
   GENERIC_READ Or GENERIC_WRITE, _
   FILE_SHARE_READ Or FILE_SHARE_WRITE, _
   0&, _
   OPEN_EXISTING, 0&, 0&;)
OpenFile = FileHandle

End Function

Public Function OpenFileMapping() As Long
Const PAGE_READWRITE = &H4

' Create file mapping
FileMappingHandle = CreateFileMapping( _
   FileHandle, 0&, PAGE_READWRITE, 0&, _
   GetFileSize(FileHandle, 0), vbNullString)
OpenFileMapping = FileMappingHandle

End Function

Public Function MapFileView() As Long
Const SECTION_MAP_READ = &H4
Const SECTION_MAP_WRITE = &H2
Const FILE_MAP_READ = SECTION_MAP_READ
Const FILE_MAP_WRITE = SECTION_MAP_WRITE

FileViewBase = MapViewOfFile( _
   FileMappingHandle, FILE_MAP_WRITE, 0&, 0&, 0&;)
MapFileView = FileViewBase
End Function

Public Function UnMapFileView() As Long
UnMapFileView = UnMapViewOfFile(FileViewBase)
End Function

Public Function CloseFileMapping() As Long
CloseFileMapping = CloseHandle(FileMappingHandle)
End Function

Public Function CloseFile() As Long
CloseFile = CloseHandle(FileHandle)
End Function

Function MappingBegin(FileName As String) As Long
 Call OpenFile(FileName)
 Call OpenFileMapping
 MappingBegin = MapFileView
End Function

Sub MappingEnd()
 Call CloseFileMapping
 Call CloseFile
 Call UnMapFileView
 FileHandle = 0
 FileMappingHandle = 0
 FileViewBase = 0
End Sub


 Содержимое файла проецируется в память, а тебе выдаётся указатель на первый байт. Его (указатель) ты можешь использовать с любой API, которая работает с памятью.

Ответить

Номер ответа: 20
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #20
Добавлено: 27.10.04 02:32
Да, ещё, если функция провалилась, то MappingBegin возвращает -1.
 MappingBegin - это обёртка. Я её написал чтобы скрыть рутинную инициализацию.

Ответить

Номер ответа: 21
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #21
Добавлено: 27.10.04 02:36
 По поводу второго я вообще без балды, но могу предположить что: во первых тебе нужно сначала изучить FAT/NTFS; а во вторых, тебе скорее всего понадобится драйвер, т.к. в пользовательском режиме доступ к оборудованию не предусмотрен.

Ответить

Номер ответа: 22
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #22
Добавлено: 27.10.04 02:40
И ещё, советую доработать этот модуль, т.к. он переделан из модуля класса (ну не люблю я классы по любому поводу использовать) со всеми вытекающими отсюда последствиями.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам