Open "750 Mb " for Output as #1 = .... Stuck

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Open "750 Mb " for Output as #1 = .... Stuck

Сообщение Max! » 14.07.2005 (Чт) 14:18

Привет всем! Давненько меня не было, есть небольшая просьба, челы! Есть файл размером 750 Mb или больше, надо его открыть и закрутить все содержание в переменную! С open "" for ... даже молчу, искал по форуму, конкретно ничего нету, может, кто имеет под рукой чего-нить дельного, чтобы быстренько открывало? Собственно, все!

:wink:
Max!

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.07.2005 (Чт) 14:55

У кого-то опять хорошее настроение? :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Сообщение Mikle » 14.07.2005 (Чт) 17:12

Код: Выделить всё
Option Explicit
Dim m() As Byte

Private Sub Form_Load()
Dim nf As Integer
  nf = FreeFile
  Open "name.ext" For Binary As #nf
  ReDim m(LOF(nf) - 1)
  Get #nf, , m()
  Close #nf
End Sub

Чем не устраивает?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 15.07.2005 (Пт) 14:40

Mikle писал(а):Чем не устраивает?


Это конечно, помоему, один из самых быстрых способов загрузки файла, да вот только если оный будет весить 750 метров, прога повиснет минут на 15-20.

Я сталкивался с загрузкой больших файлов в переменную - оптимальный вариант загружать файл порциями (где-то по 10 Кб, мож чуть больше). При этом и скорость загрузки поболее чем у Word-а, и прогресбаром можно показать состояние загрузки.
А я все практикую лечение травами...

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 16.07.2005 (Сб) 14:46

2Павлов Максим а ти не хочешь поделтиться source -ми, как ти там порциями его с прогресс-баром :roll:
On Fatal Error Resume Next

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 16.07.2005 (Сб) 15:06

да , интересно на код взглянуть
:wink:
Max!

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.07.2005 (Сб) 15:13

Код: Выделить всё
Option Explicit

Private Sub Form_Load()
    Dim strFileName As String, strData As String
    Dim f As Long
    Dim lSize As Long
    strFileName = InputBox$("Введите имя файла:", "Открытие файла", "C:\boot.ini")
    If strFileName = vbNullString Then Exit Sub
    lSize = FileLen(strFileName)
    strData = Space$(lSize)
    f = FreeFile
    Open strFileName For Binary Access Read As #f
        Get #f, , strData
    Close #f
    rtbTextBox.Text = strData
End Sub


Самый быстрый способ средствами VB, который я знаю.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 17.07.2005 (Вс) 1:20

BV писал(а):Самый быстрый способ средствами VB, который я знаю.

ну это конечно здорово, Mikle почти тоже самое предложил... тока мы пока от Павлов а ждем примерчик с прогресс-баром и открытием файла по порциям :evil:
On Fatal Error Resume Next

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 17.07.2005 (Вс) 10:45

Код: Выделить всё
Public Const MOVEFILE_REPLACE_EXISTING = &H1
Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
Public Const FILE_BEGIN = 0
Public Const FILE_SHARE_READ = &H1
Public Const FILE_SHARE_WRITE = &H2
Public Const CREATE_NEW = 1
Public Const CREATE_ALWAYS = 2
Public Const OPEN_EXISTING = 3
Public Const GENERIC_READ = &H80000000
Public Const GENERIC_WRITE = &H40000000
Public Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Any) As Long
Public Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long
Public Declare Function CreateFile Lib "kernel32" Alias "CreateFileW" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Any, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Declare Function GetFileSize Lib "kernel32" (ByVal hFile As Long, lpFileSizeHigh As Long) As Long
Public Declare Function SetFilePointer Lib "kernel32" (ByVal hFile As Long, ByVal lDistanceToMove As Long, lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long



Код: Выделить всё

....
dim ReadBytesCount as long
dim fPtr as long
dim FileSize as long
dim fHandle as long
dim Temp_Var as (byte, integer,long...etc)
.....
fHandle = CreateFile(FileName, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, ByVal 0&, OPEN_EXISTING, 0, 0)

FileSize = GetFileSize(fHandle, 0)
...
fptr=0
SetFilePointer fHandle, 0, 0, FILE_BEGIN
While fPtr < FileSize
    ReadFile fHandle, Temp_Var,len(Temp_Var), ReadBytesCount, ByVal 0&
    fPtr = fPtr +len(Temp_Var)
Wend
CloseHandle (fHandle)



Eduard
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 31.08.2003 (Вс) 17:12
Откуда: Эстония

Сообщение Eduard » 17.07.2005 (Вс) 14:24

2Inferno на скока я понял ReadBytesCount - это и есть порция :roll:
On Fatal Error Resume Next

Inferno
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 179
Зарегистрирован: 26.01.2005 (Ср) 1:06

Сообщение Inferno » 17.07.2005 (Вс) 14:50

Дурной денью Исправляюсь.
Нет это количество фактически считаных байт. Т.е. если у тебя в файле 3 байта а ты считываешь в переменную типа лонг, то значеие этой переменной будет равно 3.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 18.07.2005 (Пн) 6:28

Ждите, завтра-послезавтра на работу дисок принесу с моими исходниками и выложу на обозрение.

Там все намного проще, чем у Inferno :arrow:
А я все практикую лечение травами...

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 19.07.2005 (Вт) 6:34

Дождались? Вот вырезка из моей проги, надеюсь разберетесь, ток кут по 30 Кб:
Код: Выделить всё
.gGe.Value = 0
.gGe.Max = FileLen(CurFilePath)
ff = FreeFile
Open CurFilePath For Binary Access Read Lock Read As #ff
    Do While Loc(ff) < LOF(ff)
        DoEvents
        If prStop Then SaveFileToBase = False: Exit Function
        If prPause Then
            Do
                DoEvents
                If prStop Then SaveFileToBase = False: Exit Function
                If Not prPause Then Exit Do
            Loop
        End If
        s1 = Input(1024 * 31, #ff)
        .gGe.Value = .gGe.Value + Len(s1)
        s = s & s1
    Loop
    .cmdStop_Click
Close
Set rS = dB.OpenRecordset("select SourceFile, FileName from tblProjects where NameID=" & Prj)
rS.Edit
rS!SourceFile = s
rS!FileName = TrimString(CurFileName)
rS.Update
Set rS = Nothing
А я все практикую лечение травами...


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 67

    TopList