void ListenFilesWrite(FileBuffer files) { int iterF = 0; long iterB = 0; // try { foreach (var file in files.files) { progresser.Update(iterF++, file.name); using (var io = File.Create(file.destination)) { // using (var iob = new BufferedStream(io, 1024 * 128)) { long size = 0; long count; while (size < file.size) { // while (ListenBytes.Count == 0 && !ListenBytesDone) { } if (ListenBytes.Count > 0) { size += count = ListenBytes.Dequeue(io, SafeSubstract(file.size, size)); progresser.Update(iterB += count); } } } } File.SetLastWriteTime(file.destination, file.modified); } } //catch (Exception) { } ListenBytesDone = true; }
public void Init(FileBuffer buffer) { if (!(enabled = buffer.RequireAsyncStatus())) { return; } Invoke(new Action(() => Init(buffer.files.Count, buffer.totalSize, ""))); }
private void ListenToFiles(NetworkStream stream, FileBuffer files) { ListenBytes.Clear(); ListenBytesDone = false; ThreadPool.QueueUserWorkItem((x) => ListenFilesWrite(files)); while (!ListenBytesDone) { ListenBytes.Enqueue(stream); } }
void EmitFilesRead(FileBuffer files) { try { foreach (var file in files.files) { using (var io = File.OpenRead(file.source)) { var size = 0; while ((size += EmitBytes.Enqueue(io, SafeSubstract(file.size, size))) < file.size) { } } } } catch (Exception) { } EmitBytesDone = true; }
public static FileBuffer FileDropsToBuffer(string[] paths) { var policy = Main.Current.config.FileTransfer; if (policy == Main.FileTransferFlag.Block | (paths.Length > 1 & policy == Main.FileTransferFlag.Single)) { return(null); } try { var files = new FileBuffer(); for (int i = 0; i < paths.Length; i++) { if (File.Exists(paths[i])) { files.Add(new FileInfo(paths[i])); } } for (int i = 0; i < paths.Length; i++) { if (Directory.Exists(paths[i])) { var root = Path.GetDirectoryName(paths[i]); foreach (var filePath in Directory.EnumerateFiles(paths[i], "*", SearchOption.AllDirectories)) { files.Add(new FileInfo(filePath), root); } } } return(files); } catch (Exception) { return(null); } }
public static void SetupTemporaryFiles(FileBuffer buffer) { // Cleanup dirs Directory.CreateDirectory(DumpDestination); var dir = new DirectoryInfo(DumpDestination); foreach (var file in dir.EnumerateFiles()) { file.Delete(); } foreach (var fold in dir.EnumerateDirectories()) { fold.Delete(true); } // Make empty directories foreach (var file in buffer.files) { Directory.CreateDirectory(Path.GetDirectoryName(file.destination)); } }