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));
        }
Пример #2
0
        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);
        }
Пример #3
0
        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
        }