public override Uri Save(string domain, string path, Stream stream) { LogManager.GetLogger("ASC").Debug("Save " + path); var buffered = stream.GetBuffered(); if (QuotaController != null) { QuotaController.QuotaUsedCheck(buffered.Length); } if (path == null) { throw new ArgumentNullException("path"); } if (buffered == null) { throw new ArgumentNullException("stream"); } //Try seek to start if (buffered.CanSeek) { buffered.Seek(0, SeekOrigin.Begin); } //Lookup domain var target = GetTarget(domain, path); CreateDirectory(target); //Copy stream //optimaze disk file copy var fileStream = buffered as FileStream; long fslen; if (fileStream != null && WorkContext.IsMono) { File.Copy(fileStream.Name, target, true); fslen = fileStream.Length; } else { using (var fs = File.Open(target, FileMode.Create)) { var buffer = new byte[BufferSize]; int readed; while ((readed = buffered.Read(buffer, 0, BufferSize)) != 0) { fs.Write(buffer, 0, readed); } fslen = fs.Length; } } QuotaUsedAdd(domain, fslen); crypt.EncryptFile(target); return(GetUri(domain, path)); }
public void GetFileSize() { var testFile = CommonMethods.CreateTestFile(); Crypt.EncryptFile(testFile.Path); var size = Crypt.GetFileSize(testFile.Path); CommonMethods.DeleteTestFile(testFile.Path); Assert.AreEqual(testFile.Size, size); }
public void GetFileSizeSpeedTest() { var iterations = 100000; var fileInfo = CommonMethods.CreateTestFile(); long fileInfoSize = 0; var fileInfoWatch = Stopwatch.StartNew(); //Parallel.For(0, iterations, (a) => fileInfoSize = new FileInfo(fileInfo.Path).Length); for (var i = 0; i < iterations; i++) { fileInfoSize = new FileInfo(fileInfo.Path).Length; } fileInfoWatch.Stop(); var fileInfoSizeSpeed = (float)fileInfoWatch.ElapsedMilliseconds; Crypt.EncryptFile(fileInfo.Path); long discDataTransformSize = 0; var discDataTransformWatch = Stopwatch.StartNew(); //Parallel.For(0, iterations, (a) => discDataTransformSize = Crypt.GetFileSize(fileInfo.Path)); for (var i = 0; i < iterations; i++) { discDataTransformSize = Crypt.GetFileSize(fileInfo.Path); } discDataTransformWatch.Stop(); var discDataTransformSpeed = (float)discDataTransformWatch.ElapsedMilliseconds; CommonMethods.DeleteTestFile(fileInfo.Path); Assert.AreEqual(fileInfoSize, discDataTransformSize); Assert.AreEqual(true, discDataTransformSpeed / fileInfoSizeSpeed < 2); // ~1.6 times slower }