یه اشتباهی انجام داده بودم واسه همین درست عمل نمیکرد الان درست داره کار میکنه اما درکش سخته چطوری داره کار میکنه چون زیاد با حلقه forech کار نکردم واسه همین یکم درکش سخته اما حتما تحلیلش میکنم( البته از زیر پوشه دو و سوم به بعد نمیفهم)
فقط مهندس چیزی که برام جالبه اینکه نمدونم چرا progressbar دیگه عمل کپی شدن رو نشون نمیده تو اون یکی پست بهم گفتین که ازopenread استفاده کنم الانم هیچ مشکلی نیست فرایند انتقال بدون هیچ خطایی اتفاق می افته اما progressbar کماکان زمان انتقال بدون تغییر باقی میمونه خیلی برام جالبه!!! به نظر شما مشکل کجا میتونه باشه؟ همه متدها رو چک کردم بدون تغییر بودن تغییری تو متدها انجام ندادم ولی...اینم سورس کامل
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApp1
{
public partial class Transfer_form : Form
{
System.Collections.Specialized.StringCollection replacementList = new System.Collections.Specialized.StringCollection();
List<string> myList = new List<string>();
BackgroundWorker worker = new BackgroundWorker();
public string form_path = "";
private bool button1WasClicked = false;
public Transfer_form()
{
InitializeComponent();
worker.WorkerSupportsCancellation = true;
worker.WorkerReportsProgress = true;
worker.DoWork += Worker_DoWork;
worker.RunWorkerCompleted += Worker_RunWorkerCompleted;
worker.ProgressChanged += Worker_ProgressChanged;
//
}
private void Transfer_form_Load(object sender, EventArgs e)
{
textBox1.Text =form_path;
replacementList=(Clipboard.GetFileDropList());
for (int i = 0; i < replacementList.Count; i++)
{
listfiles.Items.Add(replacementList[i].ToString());
}
this.listfiles.View = System.Windows.Forms.View.List;
}
private void Worker_DoWork(object sender, DoWorkEventArgs e)
{
if (Directory.Exists(textBox1.Text+"/"+"HiradMedia") == false)
{
Directory.CreateDirectory(textBox1.Text + "/" + "HiradMedia");
}
var dest = Path.GetFullPath(textBox1.Text + "/" + "HiradMedia");
var list = new List<KeyValuePair<string, string>>();
foreach (var item in Clipboard.GetFileDropList())
{
list.Add(new KeyValuePair<string, string>(item, dest));
}
for (var i = 0; i < list.Count; i++)
{
if (Directory.Exists(list[i].Key))
{
var destFolder = Path.Combine(list[i].Value, Path.GetFileName(list[i].Key));
if (Directory.Exists(destFolder) == false)
{
Directory.CreateDirectory(destFolder);
}
foreach (var file in Directory.GetFiles(list[i].Key))
{
list.Add(new KeyValuePair<string, string>(file, destFolder));
}
foreach (var folder in Directory.GetDirectories(list[i].Key))
{
list.Add(new KeyValuePair<string, string>(folder, destFolder));
}
}
else if (File.Exists(list[i].Key))
{
var destFile = Path.Combine(list[i].Value, Path.GetFileName(list[i].Key));
File.Copy(list[i].Key, destFile);
}
}
}
private void Copy(string source, string destination)
{
FileStream fsout = new FileStream(destination, FileMode.Create);
using (var fsin = File.OpenRead(source))
{
byte[] buffer = new byte[1048756];//1 mb
int readbyte;
while ((readbyte = fsin.Read(buffer, 0, buffer.Length)) > 0)
{
fsout.Write(buffer, 0, readbyte);
worker.ReportProgress((int)(fsin.Position * 100 / fsin.Length));
if (worker.CancellationPending)
{
// e.Cancel = true;
worker.ReportProgress(0);
fsin.Close();
fsout.Close();
return;
}
}
}
}
private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Cancelled)
{
progressBar1.Visible = false;
MessageBox.Show("operation is abort", "abort", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else {
progressBar1.Visible = true;
MessageBox.Show("operation is completed", "abort", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void Worker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
progressBar1.Value = e.ProgressPercentage;
}
private void btncopy_Click(object sender, EventArgs e)
{
// worker.RunWorkerAsync();
button1WasClicked = true;
if(button1WasClicked)
{
worker.RunWorkerAsync();
btncopy.Enabled = false;
}
}
public void passList(List<string> mList)
{
}
}
}