public void WriteFileToStream(string fileNameOrHash, Stream stream) { ChunkedFileDescriptor fileDescriptor = GetFileDescriptor(fileNameOrHash); Args.ThrowIfNull(fileDescriptor, "fileDescriptor"); WriteFileHashToStream(fileDescriptor.FileHash, stream); }
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); }
public virtual ChunkedFileDescriptor GetFileDescriptor(string fileHashOrName) { ChunkedFileDescriptor descriptor = GetFileDescriptorByFileHash(fileHashOrName); if (descriptor == null) { descriptor = GetFileDescriptorsByFileName(fileHashOrName).SingleOrDefault(); } return(descriptor); }
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); }
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); }
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"); }
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"); }
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(); }