Вопрос: 2 вопроса про файлы и архивы | Добавлено: 02.02.07 16:38 |
Автор вопроса: ![]() |
Доброго всем времени суток!
У меня есть 2 вопроса: 1: В какую переменную записывать файлы при загрузке их с диска? Я сейчас пихаю их в string, но помоему это бред, :), ибо последствия следующие: мизерная скорость загрузки, падение этой скорости и нехватка памяти даже чтобы загрузить 1 байт на слабых компах :'( (для VB8 собсно) 2: Может ли кто подсказать сайты, где можно найти примеры и описание по архивации данных? примеры лучше на VB естесно :) сбственно интересуют сами способы архивации. |
Ответы | Всего ответов: 17 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #1 | Добавлено: 02.02.07 16:46 |
Ах да.. еще 3й вопрос ![]() или надо в какое-то другое место приложения лепить его? |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #2 | Добавлено: 02.02.07 16:51 |
Ах да.. если есть какие-либо "безгеморойные" способы заархивировать/разархивировать данные в переменной, перечислите плиз ![]() (тока главное чтобы не зависило от наличия на компьютере WinRar'а и его аналогов!) |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() Вопросов: 41 Ответов: 239 |
Профиль | Цитата | #3 | Добавлено: 02.02.07 19:44 |
1) Каким способом ты читаеш данные в String, есть просто много разных способов есть быстрыеесть медленные
2) Архивирование гдето нанашем сайте и разбиралось в поиске по форуму пройдись 3) Когда липить будеш к архиву файлы то не забывай что очень большая вероятность что файлы твои будут распознаваться как зарожённыенеизвестными вирусами так как много вирусов заражающих EXE так работают. 4)На сайте гдето есть поищи пример был покрайней мере както видел даже вроде тамможнобыло делать самораспоковывающиеся файлы |
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() Вопросов: 41 Ответов: 239 |
Профиль | Цитата | #4 | Добавлено: 02.02.07 19:44 |
1) Каким способом ты читаеш данные в String, есть просто много разных способов есть быстрыеесть медленные
2) Архивирование гдето нанашем сайте и разбиралось в поиске по форуму пройдись 3) Когда липить будеш к архиву файлы то не забывай что очень большая вероятность что файлы твои будут распознаваться как зарожённыенеизвестными вирусами так как много вирусов заражающих EXE так работают. 4)На сайте гдето есть поищи пример был покрайней мере както видел даже вроде тамможнобыло делать самораспоковывающиеся файлы |
Номер ответа: 5 Автор ответа: ![]() ![]() Вопросов: 9 Ответов: 115 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 02.02.07 19:51 |
Option Strict On
Option Explicit On Imports System.IO Imports System.IO.Compression Public Class ZipUtil Public Shared Sub CompressFile(ByVal sourceFile As String, ByVal destinationFile As String) ' make sure the source file is there If File.Exists(sourceFile) = False Then Throw New FileNotFoundException End If ' Create the streams and byte arrays needed Dim buffer As Byte() = Nothing Dim sourceStream As FileStream = Nothing Dim destinationStream As FileStream = Nothing Dim compressedStream As GZipStream = Nothing Try ' Read the bytes from the source file into a byte array sourceStream = New FileStream(sourceFile, FileMode.Open, FileAccess.Read, FileShare.Read) ' Read the source stream values into the buffer buffer = New Byte(CInt(sourceStream.Length)) {} Dim checkCounter As Integer = sourceStream.Read(buffer, 0, buffer.Length) ' Open the FileStream to write to destinationStream = New FileStream(destinationFile, FileMode.OpenOrCreate, FileAccess.Write) ' Create a compression stream pointing to the destiantion stream compressedStream = New GZipStream(destinationStream, CompressionMode.Compress, True) 'Now write the compressed data to the destination file compressedStream.Write(buffer, 0, buffer.Length) Catch ex As ApplicationException MessageBox.Show(ex.Message, "An Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally ' Make sure we allways close all streams If Not (sourceStream Is Nothing) Then sourceStream.Close() End If If Not (compressedStream Is Nothing) Then compressedStream.Close() End If If Not (destinationStream Is Nothing) Then destinationStream.Close() End If End Try End Sub Public Shared Sub DecompressFile(ByVal sourceFile As String, ByVal destinationFile As String) ' make sure the source file is there If File.Exists(sourceFile) = False Then Throw New FileNotFoundException End If ' Create the streams and byte arrays needed Dim sourceStream As FileStream = Nothing Dim destinationStream As FileStream = Nothing Dim decompressedStream As GZipStream = Nothing Dim quartetBuffer As Byte() = Nothing Try ' Read in the compressed source stream sourceStream = New FileStream(sourceFile, FileMode.Open) ' Create a compression stream pointing to the destiantion stream decompressedStream = New GZipStream(sourceStream, CompressionMode.Decompress, True) ' Read the footer to determine the length of the destiantion file quartetBuffer = New Byte(4) {} Dim position As Integer = CType(sourceStream.Length, Integer) - 4 sourceStream.Position = position sourceStream.Read(quartetBuffer, 0, 4) sourceStream.Position = 0 Dim checkLength As Integer = BitConverter.ToInt32(quartetBuffer, 0) Dim buffer(checkLength + 100) As Byte Dim offset As Integer = 0 Dim total As Integer = 0 ' Read the compressed data into the buffer While True Dim bytesRead As Integer = decompressedStream.Read(buffer, offset, 100) If bytesRead = 0 Then Exit While End If offset += bytesRead total += bytesRead End While ' Now write everything to the destination file destinationStream = New FileStream(destinationFile, FileMode.Create) destinationStream.Write(buffer, 0, total) ' and flush everyhting to clean out the buffer destinationStream.Flush() Catch ex As ApplicationException MessageBox.Show(ex.Message, "An Error occured during compression", MessageBoxButtons.OK, MessageBoxIcon.Error) Finally ' Make sure we allways close all streams If Not (sourceStream Is Nothing) Then sourceStream.Close() End If If Not (decompressedStream Is Nothing) Then decompressedStream.Close() End If If Not (destinationStream Is Nothing) Then destinationStream.Close() End If End Try End Sub End Class |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #6 | Добавлено: 03.02.07 00:10 |
считываю в string тем способом какой знаю)
FileOpen(FileNum, ppp, OpenMode.Binary) 'тут всякая ерунда... 'тут либо for, либо do, либо while FileGet(FileNum, CurByte) 'тут всякая ерунда... File Close(FileNum) остальных способов не помню...) давно под VB не программил) |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #7 | Добавлено: 03.02.07 00:13 |
собсно переменная типа byte (CurByte) и прибавляется к переменной типа string... |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #8 | Добавлено: 03.02.07 00:15 |
в виде символа конечно... |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 249094859 Вопросов: 0 Ответов: 310 |
Профиль | Цитата | #9 | Добавлено: 03.02.07 08:12 |
Во-первых зацени тот факт, что FileGet может считывать не по байту, а строку целиком (и не только строку). Во-вторых зацени такие классы, как StringReader и StreamReader. Ну и, в третьих, есть и другие типы данных, которые можно прочитать из файла, посему, заценивай BinaryReader. |
Номер ответа: 10 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #10 | Добавлено: 03.02.07 14:32 |
построчно считывать пробовал, при этом обнаружил что бывают случаи, когда попадает первый/последний байт, вобщем это только для текстовых файлов подходит...
вобщем буду заценивать BinaryReader...) |
Номер ответа: 11 Автор ответа: ![]() ![]() ![]() Вопросов: 41 Ответов: 239 |
Профиль | Цитата | #11 | Добавлено: 03.02.07 14:41 |
Самые быстрые методы чтения и записи на вой взгяд через FSO |
Номер ответа: 12 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #12 | Добавлено: 03.02.07 15:46 |
так... заценил BinaryReader... читает быстрее намного конечно ![]() ![]() ![]() вот в какого типа переменную лучше загружать файл? и чтобы потом можно было его считывать откуда хотелось и по сколько хотелось... |
Номер ответа: 13 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Вопросов: 130 Ответов: 6602 |
Профиль | Цитата | #13 | Добавлено: 03.02.07 16:07 |
показывай весь код
BinaryReader - для лузеров, реальные кенты юзают Stream. Вообще чтоб достичь скорости 200 кб/с, нужно применять сложные механизмы деоптимизации, я бы хотел на это взглянуть. |
Номер ответа: 14 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #14 | Добавлено: 03.02.07 16:59 |
ну я образно сказал "за секунду"![]() ниже код с "пробной" формы... Dim huhu As Object Try Dim im As Long Button1.Enabled = False Button2.Enabled = False Dim fs As New System.IO.FileStream(URL.Text, System.IO.FileMode.Open) Dim br As New System.IO.BinaryReader(fs) Dim downloaded As Integer = 0 Dim value As Byte Dim pp As Long pp = br.BaseStream.Length Label4.Text = "Всего: " & pp & " Байт" Dim mm As Long Do value = br.ReadByte If value = -1 Then Exit Do downloaded = downloaded + 1 im = downloaded.ToString If im > mm + 1024 Then mm = downloaded.ToString Label3.Text = "Получено: " & mm & " Байт" ProgressBar1.Value = mm / pp * 100 End If Application.DoEvents() huhu = huhu & Chr(value) Loop Button1.Enabled = True Button2.Enabled = True Catch ex As Exception Button1.Enabled = True Button2.Enabled = True End Try Диагноз... йа лузер ![]() |
Номер ответа: 15 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 15 Ответов: 63 |
Профиль | Цитата | #15 | Добавлено: 03.02.07 17:02 |
ах да... всесто As Object был String, это я просто проверял что изменится...) |
|