c # Файл, используемый кем? - PullRequest
0 голосов
/ 13 декабря 2018

Мне нужны исторические ссылки для Google Chrome, и при поиске я обнаружил файл «История» в Google Chrome.Но я не могу прочитать файл «История», потому что Google Chrome использует этот файл «История».Поэтому сначала я копирую файл «History» и читаю скопированный файл «History». Это сработало, но только один раз.Потому что, когда во второй раз я хочу ссылки на историю, я получаю сообщение об ошибке «Файл используется другим процессом» (из-за невозможности удаления).

private void button1_Click(object sender, EventArgs e)
{
    listBox1.Items.Clear(); 

    string userName = Environment.UserName;

    string confilename = string.Format(@"Data Source=C:\Users\{0}\Desktop\History1827", userName);

    string oldfilename = string.Format(@"C:\Users\{0}\AppData\Local\Google\Chrome\User Data\Default\History", userName);

    string newfilename = string.Format(@"C:\Users\{0}\Desktop\History1827", userName);

    File.Copy(oldfilename, newfilename); // I copy oldfile to newfile destination

    using (SQLiteConnection connection = new SQLiteConnection(confilename))
    {
        connection.Open();
        SQLiteCommand command1 = new SQLiteCommand();
        command1.Connection = connection;
        command1.CommandText = "Select * From urls";
        SQLiteDataReader dr = command1.ExecuteReader();
        string historylinks = "";
        while (dr.Read())
        {
            // dr[0] = ID of Link , dr[1] = Link , dr[2] = Title of Link
            historylinks = dr[0].ToString() + "\t--->" + dr[1].ToString(); // I get ID and Link from History file that i copied

            listBox1.Items.Add(historylinks);
        }

        dr.Close();
        connection.Close();


    }
    if (File.Exists(newfilename))
    {
        File.Delete(newfilename);
        MessageBox.Show("Deleted");
    }

}

Ошибка: File.Delete(newfilename);

Чтоя сделал после этого, когда я вижу эту ошибку?

private void button1_Click(object sender, EventArgs e)
{
    listBox1.Items.Clear(); 

    string userName = Environment.UserName;

    string confilename = string.Format(@"Data Source=C:\Users\{0}\Desktop\History1827", userName);

    string oldfilename = string.Format(@"C:\Users\{0}\AppData\Local\Google\Chrome\User Data\Default\History", userName);

    string newfilename = string.Format(@"C:\Users\{0}\Desktop\History1827", userName);

    File.Copy(oldfilename, newfilename); // I copy oldfile to newfile destination
 //------ I DID NOT USE SQLİTECONNECTİON -----
    //using (SQLiteConnection connection = new SQLiteConnection(confilename))
    //{
    //    connection.Open();
    //    SQLiteCommand command1 = new SQLiteCommand();
    //    command1.Connection = connection;
    //    command1.CommandText = "Select * From urls";
    //    SQLiteDataReader dr = command1.ExecuteReader();
    //    string historylinks = "";
    //    while (dr.Read())
    //    {
    //        // dr[0] = ID of Link , dr[1] = Link , dr[2] = Title of Link
    //        historylinks = dr[0].ToString() + "\t--->" + dr[1].ToString(); // I get ID and Link from History file that i copied

    //        listBox1.Items.Add(historylinks);
    //    }

    //    dr.Close();
    //    connection.Close();


    //}
    if (File.Exists(newfilename))
    {
        File.Delete(newfilename);
        MessageBox.Show("Deleted");
    }

}

Работало.Итак, если я не использую SQLiteConnection, Программа может удалить скопированный файл «History».

Кто использует скопированный файл «History»?Как я могу это исправить?

Спасибо.

1 Ответ

0 голосов
/ 13 декабря 2018

Вы можете попробовать Process Explorer , чтобы найти, какое приложение открыло дескриптор файла.Если Process Explorer не может найти это, используйте Process Monitor , чтобы определить, какой процесс пытается получить доступ к файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...