public override bool CreateFile(string file, string source, DateTime lastModified, string fileMD5, FileAttributes attributes, bool reportProgress = true) { string dest = Path.Combine(this.Dest, file); // It's almost always quicker just to re-copy the file, rather than checking // md5 of remote file. With USB, read/write times are the same. With internal // HDD, times don't differ by enough to justify md5 computational overhead. Plus other overheads // for small files... this.withHandling(() => XCopy.Copy(source, dest, true, true, (percent) => { if (reportProgress) { this.ReportProcess(percent); } return(this.Cancelled ? XCopy.CopyProgressResult.PROGRESS_CANCEL : XCopy.CopyProgressResult.PROGRESS_CONTINUE); }), file); if (this.Cancelled) { return(true); } FileInfo fileInfo = new FileInfo(dest); fileInfo.Attributes = attributes; fileInfo.IsReadOnly = false; this.withHandling(() => File.SetLastWriteTimeUtc(dest, lastModified), file); return(true); }
public override void RestoreFile(string file, string dest, DateTime lastModified) { string fullPath = Path.Combine(this.Dest, file); if (!File.Exists(fullPath)) { throw new BackupOperationException(file, "File could not be found on backend, so can't restore"); } this.withHandling(() => XCopy.Copy(fullPath, dest, true, true, (percent) => { this.ReportProcess(percent); return(this.Cancelled ? XCopy.CopyProgressResult.PROGRESS_CANCEL : XCopy.CopyProgressResult.PROGRESS_CONTINUE); }), file); if (!this.Cancelled) { this.withHandling(() => { File.SetLastWriteTimeUtc(dest, lastModified); FileInfo fileInfo = new FileInfo(dest); fileInfo.Attributes = new FileInfo(fullPath).Attributes; }, file); } }