Копирование файла
От: Dan123  
Дата: 06.10.10 15:53
Оценка:
Здравствуйте!
Нужно копировать файл с отображением хода копирования, например в прогрессбаре.
CopyFileEx мне не подходит. Самое простое, что пришло на ум, так это открыть исходный
файл на чтение, файл назначения на запись и побайтно переписать туда данные. А затем
новому файлу присвоить атрибуты, время создания, время последнего изменения и т.д. такие же,
как и у исходного файла. Ниже пример кода. В данном примере нет отображения хода копирования,
поскольку в данном случае реализация отображения прогрессбара не составляет проблем.

Вопрос в другом, могу ли я при таком подходе наступить на какие-нибудь непредвиденные грабли?

Нужно ли при таком подходе после процесса копирования еще раз открыть файлы и сравнить их побайтно,
чтобы убедиться в том, что файлы идентичны?

Я пробовал копировать таким образом скрытые, системные файлы, архивы защищенные паролем. Все работает нормально.
Единственное, хотелось бы, чтобы скорость копирования была побыстрее, но изменение размера буфера на скорость
копирования особо не сказалось.

private void copyFile(string _inputFile, string _outputFile)
{
inputFile = new FileStream(_inputFile, FileMode.Open);
outputFile = new FileStream(string _outputFile, FileMode.Create);
int i = 0;
do
{
byte[] bytes = new byte[1000];
i = inputFile.Read(bbb,0,1000);
if (i != 0)
{
outputFile.Write(bbb, 0, i);
}
} while (i != 0);

inputFile.Close();
outputFile.Close();

// теперь у скопированного файла делаю такие же атрибуты как и у исходного файла.
FileInfo source = new FileInfo(inputFile);
FileInfo destination = new FileInfo(outputFile);
destination.Attributes = source.Attributes;
destination.CreationTime = source.CreationTime;
destination.LastAccessTime = source.LastAccessTime;
destination.LastWriteTime = source.LastWriteTime;
destination.IsReadOnly = source.IsReadOnly;
destination.CreationTimeUtc = source.CreationTimeUtc;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.