Я нахожу, что File.Copy с удовольствием скопирует файл на себя, не выбрасывая исключение. По ошибке я скопировал файл базы данных sqlite на себя, и этот файл больше не является допустимой базой данных. Я повторил это как тест несколько раз и получил тот же результат. Используя winmerge (или текстовый редактор), я вижу, что файл результатов имеет 0 байт, но в проводнике Windows по-прежнему отображается исходный размер файла. Что я пропустил здесь? (vs2008, win7-64)System.Data.SQLite и странные ошибки File.Copy
Редактировать: код. Довольно упрощенно я знаю. И это не 0 байт, это все nuls.
public bool RestoreDatabaseSqlite(string backupFilePath)
{
try
{
File.Copy(backupFilePath, _databaseFilePath, true);
}
catch(Exception ex)
{
MessageBox.Show("Error restoring database file: " + ex.Message, "Database Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return false;
}
return true;
}
Edit # 2: Проблема специфична для System.Data.SQLite, открытой SQLiteConnection на файл, и взаимодействие с File.Copy. Я ожидал бы, что копия файла завершится с ошибкой, но она просто отключит весь файл.
Проверили ли вы с двоичным безопасным редактором (например, шестнадцатеричный редактором), или только простыми текстовыми редакторами? – CodesInChaos
Извините, но вы ошибаетесь. Просто попробовал сам с методом File.Copy, и вы получите «Процесс не может получить доступ к файлу ... потому что он используется другим процессом». Пожалуйста, разместите свой код, так как он * не * с помощью File.Copy –
Использование wnbrowse выглядит так, как будто это все nuls. –