Çözüm C# "File İşlemlerinde İşlem Başkası Bir İşlem Tarafından Kullanıldığından..." Hatası

Bu konu bir çözümü açıklamaktadır. Herhangi bir çözüm açıklanmadığını düşünüyorsanız konuyu rapor edebilirsiniz.
Katılım
12 Mayıs 2016
Mesajlar
1.192
Çözümler
5
Bu kod bu hataya sebep olur:
C#:
   private void button2_Click(object sender, EventArgs e)
        {
            using (var folderDialog = new FolderBrowserDialog())
            {
                if (folderDialog.ShowDialog() != DialogResult.OK)
                {
                    return;
                }
                var files = Directory.GetFiles(folderDialog.SelectedPath, "*", SearchOption.AllDirectories);
                progressBar1.Maximum = files.Length;
                progressBar1.Value = 0;

                foreach (var filePath in files)
                {
                    using (var md5 = MD5.Create())
                    {
                        using (var fileStream = File.OpenRead(filePath))
                        {
                            var hash = md5.ComputeHash(fileStream);
                            var hashString = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();

                            if (IsFileInfected(hashString))
                            {
                                ListViewItem item = new ListViewItem(new[] { filePath, "Infected" });
                                listView1.Items.Add(item);

                                if (MessageBox.Show("The file is infected. Do you want to delete it?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                                {
                                    bool deleted = false;
                                    int retries = 10;
                                    while (!deleted && retries > 0)
                                    {
                                        try
                                        {
                                            File.Delete(filePath);
                                            deleted = true;
                                            MessageBox.Show("The file has been deleted successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
                                        }
                                        catch (IOException ex)
                                        {
                                            retries--;
                                            System.Threading.Thread.Sleep(500);
                                            if (retries == 0)
                                            {
                                                MessageBox.Show("Failed to delete the file. The file is in use by another process. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            }
                                        }
                                        catch (UnauthorizedAccessException ex)
                                        {
                                            MessageBox.Show("Failed to delete the file. You do not have permission to delete this file. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            break;
                                        }
                                        catch (Exception ex)
                                        {
                                            MessageBox.Show("Failed to delete the file. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            break;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                ListViewItem item = new ListViewItem(new[] { filePath, "Clean" });
                                listView2.Items.Add(item);
                            }
                        }
                    }
                    progressBar1.Value++;
                }
            }
            MessageBox.Show("Folder scan complete.");
        }
Çözüm:
C#:
private void button2_Click(object sender, EventArgs e)
{
    using (var folderDialog = new FolderBrowserDialog())
    {
        if (folderDialog.ShowDialog() != DialogResult.OK)
        {
            return;
        }
        var files = Directory.GetFiles(folderDialog.SelectedPath, "*", SearchOption.AllDirectories);
        progressBar1.Maximum = files.Length;
        progressBar1.Value = 0;

        foreach (var filePath in files)
        {
            using (var md5 = MD5.Create())
            {
                using (var fileStream = File.Open(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.Delete))
                {
                    var hash = md5.ComputeHash(fileStream);
                    var hashString = BitConverter.ToString(hash).Replace("-", "").ToLowerInvariant();

                    if (IsFileInfected(hashString))
                    {
                        ListViewItem item = new ListViewItem(new[] { filePath, "Infected" });
                        listView1.Items.Add(item);

                        if (MessageBox.Show("The file is infected. Do you want to delete it?", "Warning", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                        {
                            try
                            {
                                fileStream.Close();
                                File.Delete(filePath);
                                MessageBox.Show("The file has been deleted successfully.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            }
                            catch (UnauthorizedAccessException ex)
                            {
                                MessageBox.Show("Failed to delete the file. You do not have permission to delete this file. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            catch (IOException ex)
                            {
                                MessageBox.Show("Failed to delete the file. The file is in use by another process. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            catch (Exception ex)
                            {
                                MessageBox.Show("Failed to delete the file. " + ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                        }
                    }
                    else
                    {
                        ListViewItem item = new ListViewItem(new[] { filePath, "Clean" });
                        listView2.Items.Add(item);
                    }
                }
            }
            progressBar1.Value++;
        }
    }
    MessageBox.Show("Folder scan complete.");
}

Kopyalamaya izin vermeyen siteler kalitelidir. Unutmayın.
 
Son düzenleyen: Moderatör:
Merhaba ben GitHub'dan bir proje indirdim biraz değiştirip kendime göre bir şeyler yapmaya çalışıyorum ama delete hatası alıyorum çözemedim acaba yarrdımcı olur musun? Kodu aşağıya bırakıyorum.

string n=" ";

StreamReader stream = new StreamReader(item); // قرائة الملفات

string read = stream.ReadToEnd();



foreach (string st in viruselist)

{

if (Regex.IsMatch(read, st))

{





File.WriteAllText(item, n);# HATA ALDIĞIM KISIM BURASI








}

}


}


button2.Enabled = false;

listBox1.ForeColor = Color.Green;

label4.Visible = true;

viruses = 0;

label1.Text = "viruses: " + viruses.ToString();

}
 
Merhaba ben GitHub'dan bir proje indirdim biraz değiştirip kendime göre bir şeyler yapmaya çalışıyorum ama delete hatası alıyorum çözemedim acaba yarrdımcı olur musun? Kodu aşağıya bırakıyorum.

string n=" ";

StreamReader stream = new StreamReader(item); // قرائة الملفات

string read = stream.ReadToEnd();



foreach (string st in viruselist)

{

if (Regex.IsMatch(read, st))

{





File.WriteAllText(item, n);# HATA ALDIĞIM KISIM BURASI








}

}


}


button2.Enabled = false;

listBox1.ForeColor = Color.Green;

label4.Visible = true;

viruses = 0;

label1.Text = "viruses: " + viruses.ToString();

}
Hangi proje? Eğer antivirüs yapmaya çalışıyorsan baya ilerledim bu konuda.
 
Hangi proje? Eğer antivirüs yapmaya çalışıyorsan bayağı ilerledim bu konuda.

Evet hocam tam olarak antivirüs yapmaya çalışıyorum. Discord'dan iletişime geçebilir miyiz?
Bana da bilgilerinizi aktarırsanız sevinirim henüz yeniyim de.
 
Anladım hocam ben C# ile başlamıştım ama acaba size göndersem projeyi bir bakabilir misiniz zahmet olmazsa?
 

Geri
Yukarı