Используйте Robocopy, он имеет способность скопировать файлы в "прерываемом режиме", плюс он должен уважать атрибуты файла. И это идет с Vista и Сервером 2008, и можно загрузить его для более старой ОС. Плюс Вы может установить его, чтобы повторить на неудавшихся копиях, взять файлы, которые временно используются другим процессом.
Атрибут DataType в MVC1 не выполняет то, что вы ожидаете, похоже, что и в MVC2 этого нет. Лучше всего иметь строковое свойство, представляющее дату, проверьте его действительность там.
Вот небольшой отрывок из проекта (с использованием DataAnnotations и xVal):
private List<ErrorInfo> _errors;
private List<ErrorInfo> Errors
{
get
{
if (_errors == null)
_errors = new List<ErrorInfo>();
return _errors;
}
//set { _errors = value; }
}
private string _startDateTimeString;
/// <summary>
/// A string reprsentation of the StartDateTime, used for validation purposes in the views.
/// </summary>
/// <remarks>
/// If the user passes something like 45/45/80 it would be a valid mm/dd/yy format, but an invalid date,
/// which would cause an InvalidOperationException to be thrown by UpdateModel(). By assigning dates to string properties
/// we can check not only the format, but the actual validity of dates.
/// </remarks>
public string StartDateTimeString
{
get
{
return _startDateTimeString;
}
set
{
// Check whether the start date passed from the controller is a valid date.
DateTime startDateTime;
bool validStartDate = DateTime.TryParse(value, out startDateTime);
if (validStartDate)
{
StartDateTime = startDateTime;
}
else
{
Errors.Add(new ErrorInfo("StartDateTime", "Provide a valid date for the start time."));
}
_startDateTimeString = value;
}
}
partial void OnValidate(ChangeAction action)
{
if (action != ChangeAction.Delete)
{
Errors.AddRange(DataAnnotationsValidationRunner.GetErrors(this));
if (StartDateTimeString != null)
{
DateTime startDateTime;
if (!DateTime.TryParse(StartDateTimeString, out startDateTime))
{
Errors.Add(new ErrorInfo("StartDateTime", "Provide a valid date for the start time."));
}
}
if (Errors.Any())
throw new RulesException(Errors);
}
}
}
Имеет смысл иметь проверку в обоих местах нашего проект, но я просто хочу показать вам концепцию.