Exemple #1
0
        public void WriteFileToStream(string fileNameOrHash, Stream stream)
        {
            ChunkedFileDescriptor fileDescriptor = GetFileDescriptor(fileNameOrHash);

            Args.ThrowIfNull(fileDescriptor, "fileDescriptor");
            WriteFileHashToStream(fileDescriptor.FileHash, stream);
        }
Exemple #2
0
        public FileInfo WriteFileDataToDirectory(string fileNameOrHash, string directoryPath)
        {
            ChunkedFileDescriptor fileDescriptor = GetFileDescriptor(fileNameOrHash);

            Args.ThrowIfNull(fileDescriptor, "fileDescriptor");
            string   localPath = Path.Combine(directoryPath, fileDescriptor.FileName);
            FileInfo file      = new FileInfo(localPath);

            if (File.Exists(localPath) && !fileDescriptor.FileHash.Equals(file.Sha256()))
            {
                File.Delete(localPath);
            }
            if (!file.Directory.Exists)
            {
                file.Directory.Create();
            }
            if (!File.Exists(localPath))
            {
                using (FileStream fs = new FileStream(localPath, FileMode.Create))
                {
                    WriteFileHashToStream(fileDescriptor.FileHash, fs);
                }
            }
            file.Refresh();
            return(file);
        }
Exemple #3
0
        public virtual ChunkedFileDescriptor GetFileDescriptor(string fileHashOrName)
        {
            ChunkedFileDescriptor descriptor = GetFileDescriptorByFileHash(fileHashOrName);

            if (descriptor == null)
            {
                descriptor = GetFileDescriptorsByFileName(fileHashOrName).SingleOrDefault();
            }
            return(descriptor);
        }
Exemple #4
0
        public virtual ChunkedFileDescriptor SaveFileDescriptor(ChunkedFileDescriptor fileDescriptor)
        {
            Args.ThrowIfNull(fileDescriptor, "fileDescriptor");
            ChunkedFileDescriptor existing = Repository.Query <ChunkedFileDescriptor>(
                Filter.Where(nameof(ChunkedFileDescriptor.FileHash)) == fileDescriptor.FileHash &&
                Filter.Where(nameof(ChunkedFileDescriptor.FileName)) == fileDescriptor.FileName &&
                Filter.Where(nameof(ChunkedFileDescriptor.OriginalDirectory)) == fileDescriptor.OriginalDirectory).FirstOrDefault();

            if (existing == null)
            {
                existing = Repository.Save(fileDescriptor);
            }
            return(existing);
        }
Exemple #5
0
        public ChunkedFileDescriptor StoreFileChunks(FileInfo file, string description = null)
        {
            ChunkedFileReader     chunked = new ChunkedFileReader(file, ChunkLength);
            ChunkedFileDescriptor chunkedFileDescriptor = chunked.ToChunkedFileDescriptor(description);

            SaveFileDescriptor(chunkedFileDescriptor);

            foreach (ChunkedFileDataDescriptor chunkFileDataDescriptor in chunked.ToChunkedFileDataDescriptor())
            {
                ChunkData chunk = chunkFileDataDescriptor.ChunkData;
                SaveChunkData(chunk);
                ChunkDataDescriptor xref = chunkFileDataDescriptor.ChunkDataDescriptor;
                SaveChunkDataDescriptor(xref);
            }
            return(chunkedFileDescriptor);
        }
        public static ChunkedFileWriter FromFileHash(CoreFileService svc, string fileHash, ILogger logger = null)
        {
            ChunkedFileDescriptor descriptor = svc.GetFileDescriptor(fileHash);
            ChunkedFileWriter     writer     = new ChunkedFileWriter(svc)
            {
                FileHash          = fileHash,
                ChunkCount        = descriptor.ChunkCount,
                ChunkLength       = descriptor.ChunkLength,
                FileLength        = descriptor.FileLength,
                FileName          = descriptor.FileName,
                OriginalDirectory = descriptor.OriginalDirectory,
                Logger            = logger
            };

            return(writer);
        }
Exemple #7
0
        public void FileServiceRestoreTest()
        {
            SQLiteDatabase db    = new SQLiteDatabase(".\\", nameof(FileServiceRestoreTest));
            FileService    fmSvc = new FileService(new DaoRepository(db))
            {
                ChunkLength = 111299
            };
            FileInfo testDataFile             = new FileInfo("C:\\Bam\\Data\\Test\\TestDataFile.dll");
            ChunkedFileDescriptor chunkedFile = fmSvc.StoreFileChunks(testDataFile);
            FileInfo writeTo = new FileInfo($".\\{nameof(FileServiceRestoreTest)}_restored");
            DateTime start   = DateTime.UtcNow;
            FileInfo written = fmSvc.RestoreFile(chunkedFile.FileHash, writeTo.FullName, true);
            TimeSpan took    = DateTime.UtcNow.Subtract(start);

            OutLine(took.ToString(), ConsoleColor.Cyan);
            Expect.IsTrue(written.Exists);
            Expect.AreEqual(testDataFile.Md5(), written.Md5(), "file content didn't match");
        }
Exemple #8
0
        public void FileServiceRestoreAsyncTest()
        {
            SQLiteDatabase db    = new SQLiteDatabase(".\\", nameof(FileServiceRestoreAsyncTest));
            FileService    fmSvc = new FileService(new DaoRepository(db));

            fmSvc.ChunkLength = 111299;
            ConsoleLogger logger = new ConsoleLogger();

            logger.AddDetails = false;
            logger.StartLoggingThread();
            FileInfo testDataFile             = new FileInfo("C:\\Bam\\Data\\Test\\TestDataFile.dll");
            ChunkedFileDescriptor chunkedFile = fmSvc.StoreFileChunks(testDataFile);
            FileInfo          writeTo         = new FileInfo($".\\{nameof(FileServiceRestoreAsyncTest)}_restored.dat");
            DateTime          start           = DateTime.UtcNow;
            ChunkedFileWriter writer          = ChunkedFileWriter.FromFileHash(fmSvc, chunkedFile.FileHash, logger);

            writer.Write(writeTo.FullName).Wait();
            TimeSpan took    = DateTime.UtcNow.Subtract(start);
            FileInfo written = new FileInfo(writeTo.FullName);

            OutLine(took.ToString(), ConsoleColor.Cyan);
            Expect.IsTrue(written.Exists);
            Expect.AreEqual(testDataFile.Md5(), written.Md5(), "file content didn't match");
        }
Exemple #9
0
 public FileInfo RestoreFile(ChunkedFileDescriptor fileDescriptor, string localPath = null)
 {
     return(RestoreFile(fileDescriptor.FileHash, localPath ?? Path.Combine(fileDescriptor.OriginalDirectory, fileDescriptor.FileName)));
 }
 public ChunkedFileDescriptor SaveFileDescriptor(ChunkedFileDescriptor fileDescriptor)
 {
     throw new NotImplementedException();
 }
 public FileInfo RestoreFile(ChunkedFileDescriptor fileDescriptor, string localPath = null)
 {
     throw new NotImplementedException();
 }