PDA

View Full Version : سوال: شبیه سازی کپیه ویندوز



mehran5
شنبه 04 آبان 1387, 23:12 عصر
سلام من میخوام با استفاده از دات نت کپی کردن ویندوز رو شبیه سازی کنم .دوستان راهنمایی کردند.برای کپی کردن یک فایل تابع زیر رو راهنمایی کردند:



My.Computer.FileSystem.CopyFile(s1, S2, True)

که S1مسیر فایل مبدآ با نامش هست وS2مسیر فایل مقصد(پیست شده) با نامش هست .حالا قصد داریم خاصیت MAXIMOMاز PROGRESS BAR رو با استفاده از حجم فایل تنظیم کنیم , بطوریکه متناسب با حجم فایلی که پیست میشه ,PROGRESS BAR هم پر شه .ممنون میشم کسی کمکم کنه.:اشتباه:

Armin060
شنبه 04 آبان 1387, 23:49 عصر
اول بايد حجم فايل كپی شده رو به دست بياری ( يعنی حجم كل )، و مقدار Max نوار پيشرفت رو برابر حجم كل قرار بدی. هنگام پيست شدن فايلی مخفی ( فكر كنم ) درست ميشه. شما بايد حجم اون فايل رو به دست بياريد و بعد مقدار Vlaue ی نوار پيشرفت رو برابر حجم اون فايل هه قرار بديد.

reza6384
یک شنبه 05 آبان 1387, 00:19 صبح
اول بايد حجم فايل كپی شده رو به دست بياری ( يعنی حجم كل )، و مقدار Max نوار پيشرفت رو برابر حجم كل قرار بدی. هنگام پيست شدن فايلی مخفی ( فكر كنم ) درست ميشه. شما بايد حجم اون فايل رو به دست بياريد و بعد مقدار Vlaue ی نوار پيشرفت رو برابر حجم اون فايل هه قرار بديد.

سلام.
شما تقریبا درست میگی، فقط کی باید Value مربوط به Progress بار رو اضافه کنیم. اینجوری که شما میگین اولش مقداره صفره، بعد فایل کپی میشه ، بعد یهو میشه Maximum.

Armin060
یک شنبه 05 آبان 1387, 00:34 صبح
نه...نه....نه.....نه.....نه.... :عصبانی++:

بابا من اون فايل كامل كپی شده رو نميگم. وقتی يه فايل داره كپی ميشه، ويندوز يه فايل ديگه به صورت مخفی ميسازه و اطلاعات رو روی اون ذخيره ميكنه و بعد .... ما بايد اون فايل مخفی يه رو حجمش رو به دست بياريم.

البته يه راه ديگه هم هست كه فكر كنم راحت باشه. با استفاده از File در IO.

mehran5
یک شنبه 05 آبان 1387, 08:54 صبح
شما درست میگیدکد روبرو چهار مشخصه از فایل رو بر میگردونه به information


information = My.Computer.FileSystem.GetFileInfo("s1")
ProgressBar1.Maximum = information.Length

که یکی حجم فایله متاسفانه حجم رو به بیت میده مثلا 48 مگابایت رو 48000000بیت میده که میبینید بعد از پیست کامل فایل تازه یک ردیف از پروگرس بار پر شده .
در ثانی ظاهرا کد بالا فایلهای کمتر از 1 مگابایت رو پیدا نمیکنه.
اگه مشکلمو حل کنه کمک زیادی کزده.:عصبانی++:

Armin060
یک شنبه 05 آبان 1387, 16:11 عصر
من كه گفتم با IO كار راحتر است. چرا از My.Computer استفاده كردی؟

mostafaaa
یک شنبه 05 آبان 1387, 18:23 عصر
سلام
این کدی رو که میزارم فکر نمیکنم بهترین راه برای این کار باشه. ولی خوب چیزیه که به ذهن من رسیده . دوستان اگه راهها بهتری دارن بگن تا بلکه ما هم چیزی یاد بگیریم.

Public Class Form1
'Make new backgroundWorker
Dim WithEvents BG As New System.ComponentModel.BackgroundWorker
'choos source File
Private Sub btnSource_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSource.Click
Dim OpenDialg As New OpenFileDialog
OpenDialg.ShowDialog()
If Not OpenDialg.FileName.Equals(String.Empty) Then
Me.txtSource.Text = OpenDialg.FileName
End If
End Sub
'make dastination file path
Private Sub btnDes_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDes.Click
Dim SaveDialg As New SaveFileDialog
SaveDialg.ShowDialog()
If Not SaveDialg.FileName.Equals(String.Empty) Then
Me.txtDes.Text = SaveDialg.FileName
End If
End Sub

Private Sub btnCopy_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCopy.Click
BG.WorkerReportsProgress = True
BG.RunWorkerAsync()
End Sub
'start copying file
Private Sub BG_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BG.DoWork
Try
Dim FR As New IO.FileStream(txtSource.Text, IO.FileMode.Open)
Dim FW As New IO.FileStream(txtDes.Text, IO.FileMode.CreateNew)
Dim Buffer(FR.Length - 1) As Byte
FR.Read(Buffer, 0, Buffer.Length)
Dim a As Integer = Buffer.Length / 100
Dim Count As Integer = 1
For i As Integer = 0 To Buffer.Length - 1
If i >= a And i Mod a = 0 Then
Count += 1
BG.ReportProgress(Count)
End If
FW.WriteByte(Buffer(i))
Next
FR.Close()
FW.Close()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
'feedback worker progress
Private Sub BG_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BG.ProgressChanged
Me.ProgressBar1.Value = e.ProgressPercentage
Me.lblStatus.Text = e.ProgressPercentage
End Sub
End Class

mehran5
سه شنبه 07 آبان 1387, 09:53 صبح
ممنون -حل شد

Armin060
سه شنبه 07 آبان 1387, 13:35 عصر
زدی تو ...

من يكی نوشتم كه سه چهار خط بيشتر نبود. ولی خيلی كند بود. اين بهتره...ايول