C# побайтовое удаление и перемещение файла (progressBar)

aTOMICwARfARE

Доброго времени суток :-)Имеется собственная программа с рабочим прогрессБаром для копирования.Собственно, возник вопрос о реализации части программы совместно с прогрессБар для таких функций как удаление и перемещение файла.С помощью каких команд можно это построить на C#, если для копирования использовал сам буффер, смещение байтов, макс.число байтов (скажем счётчик).
14 ответов

aTOMICwARfARE

Удаление и перемещение файла в рамках 1 логического диска это условно атомарная операция, то есть прогресс бар должен работать на основе количества. Если файл 1, то недетерминированным


aTOMICwARfARE

Roman Mejtes,Копировать можно кусочками


aTOMICwARfARE

Roman Mejtes,Копировать можно кусочками
А смысл?


aTOMICwARfARE

А смысл?
Показывать пользователю красивый прогресс


aTOMICwARfARE

В WinAPI для копирования с прогресбаром есть CopyFileEx()


aTOMICwARfARE

Доброго времени суток :-)Имеется собственная программа с рабочим прогрессБаром для копирования.Собственно, возник вопрос о реализации части программы совместно с прогрессБар для таких функций как удаление и перемещение файла.С помощью каких команд можно это построить на C#, если для копирования использовал сам буффер, смещение байтов, макс.число байтов (скажем счётчик).
using System;
using System.IO;

namespace FileCopier
{
	class Program
	{

		static void Main(string[] args)
		{
			var _src = "source.dat";
			var _dest = "destination.dat";
			var _str = new String('o', 100);
			using(var _ifs = new FileStream(_src, FileMode.Open))
			using (var _ofs = new FileStream(_dest, FileMode.Create))
			{ 
				int b = 0;
				var _length = _ifs.Length;
				var _count = 0;
				var _perc = 0;
				var _byteInPerc = _length / 100;
				while((b =_ifs.ReadByte()) >= 0)
				{
					
					_ofs.WriteByte((byte)b);
					_count++;

					if(_count > _byteInPerc)
					{
						_perc++;
						_count = 0;
						Console.Write("\r{0}{1}", new String('x', _perc), new String('o', 100 - _perc));

					}
				}
			}
			Console.WriteLine("\r{0}", new String('x', 100));
			Console.WriteLine("Copiren das complete. Press enter to exit.");
			Console.ReadLine();
		}
	}
}

Для тестирования нужен файл порядка 1Гб, чтобы увидеть прогресс.


aTOMICwARfARE

А побайтовое удаление файла это как???


aTOMICwARfARE

Перемещение файла в рамках одного логического диска в ntfs это не то же самое, что копирование и удаление файла.


aTOMICwARfARE

aTOMICwARfARE,Расскажите про удаление с прогрессбаром.


aTOMICwARfARE

aTOMICwARfARE,Расскажите про удаление с прогрессбаром.
есть 1000 файлов, каждый удаленный файл увеличивает прогресс на 0.1%, что тут не понятного?возможно человеку нужно не просто удалить файл, а затереть его полностью, тогда нужно просто 10 раз забить файл нулями и потом просто удалить (количество зависит от уровня параноидальной шизы автора), но метаинформация всё равно будет храниться довольно долго


aTOMICwARfARE

Roman Mejtes,У него в 1 посте ОДИН файл в задаче. Или не?


aTOMICwARfARE

Roman Mejtes,У него в 1 посте ОДИН файл в задаче. Или не?
зная как тут люди формулируют свои проблемы, это вопрос, как вопрос про кота Шрёдингера =) одному богу известно, что имел ввиду автор :) и нафига ему это всё нужно, люди любят сами придумывать себе проблемы :)


aTOMICwARfARE

Человек неправильно прочитал задание к лабораторке, а суровые дядьки в растянутых свитерах морщат лбы, чего ж ему надо :)


aTOMICwARfARE

Перемещение файла в рамках одного логического диска в ntfs это не то же самое, что копирование
да
Перемещение файла в рамках одного логического диска в ntfs это не то же самое, что ... удаление файла.
нет