PDA

View Full Version : برای خواندن فایل ها به صورت باینری چند راه داریم؟ (سرعت خواندن فایل)



one hacker alone
سه شنبه 09 اردیبهشت 1393, 19:05 عصر
با یاد خدا
سلام دوستان
میخواستم بدونم چند راه برای خوندن فایل به صورت باینری داریم من از روش معمولی خوندن فایل استفاده میکنم یعنی فایل رو به صورت باینری باز میکنم و میخونم اما اگه فایل یکم حجمش بالا باشه مثلا در حد 50 کیلوبایت باشه خیلی زمان میبره
خواستم بدونم چه روش هایی هست ؟
و اینکه ایا ما برای افزایش سرعت اینجا میتونیم از چند نخی استفاده کنیم؟

vbhamed
چهارشنبه 10 اردیبهشت 1393, 10:31 صبح
سلام
خب شما روش استفادتون رو بزاريد تا ببينيم مشكلش كجاست
50 كيلوبايت اصلا حجمي نيست كه بخواد طول بكشه شايد هم منظورتون 50 مگابايت بوده
ولي اول اينكه كدتون رو بزاريد، دوم منظورتون از زمان چقدره ؟

one hacker alone
چهارشنبه 10 اردیبهشت 1393, 19:12 عصر
سلام
کد زیر یک فایل رو با هر پسوندی که باشه به صورت باینری میخونه و میتونه با کدی که در textbox میریزه اون رو در مسیر دیگه روی هارد رایت کنه
که البته این کد فقط برای خوندن فایل هست

Private Function fragmentfile(ByVal fname As String)
Open fname For Binary As #1
Dim file() As Byte, fragmentize As String, i&
ReDim file(LOF(1))
Get #1, , file
For i = 0 To UBound(file)
Text1.Text = Text1.Text + IIf(Len(Hex$(file(i))) < 2, "0" & Hex$(file(i)), Hex$(file(i)))
Next
Close #1
End Function

ورودی ما هم ادرس فایل هست
در مورد زمان باید بگم یک فایل 50kb رو نزدیک به 10 دقیقه طول میکشه تا بخونه و در کامپیوتری با سرعت بالا 5 دقیقه طول میکه اما باز همین مقدار هم منطقی نیست به نظر من

Mohammad_dn
چهارشنبه 10 اردیبهشت 1393, 20:12 عصر
احتمالا به خاطر اینه که شما اطلاعات فایلو داحل یک تکس باکس میریزی..به همین دلیل طول میکشه

one hacker alone
پنج شنبه 11 اردیبهشت 1393, 02:09 صبح
فکر نکنم از اون باشه البته تست نکردم
اما خب چه آرایه ای براش تعریف کنیم که بتونه رشته ی طولانی این فایل رو در خودش ذخیره کنه

vbhamed
پنج شنبه 11 اردیبهشت 1393, 12:59 عصر
سلام
سرعت پايين شما به دو دليل هست
اول اينكه TextBox خودش خيلي كند هست، دوم اينكه داخل حلقه دائم مقدار TextBox رو تغيير ميدين
بنابراين براي افزايش سرعت از كد زير استفاده كنيد و به جاي TextBox هم از RichTextBox البته اگر حتما نياز به نشون دادن به كاربر داريد و گرنه خط يكي به آخر نيازي نيست و سرعتتون باز هم بيشتر ميشه
Private Function fragmentfile(ByVal fname As String)

Open fname For Binary As #1

Dim file() As Byte, fragmentize As String, i&, s$, h$

ReDim file(LOF(1))
Get #1, , file
Close #1

For i = 0 To UBound(file)

h = Hex$(file(i))
If Len(h) < 2 Then h = "0" & h
s = s & h

Next

ReDim file(0)

RichTextBox1 = s

End Function