internal Stream OpenWrite(string path, WriteMode mode) { path = NormalizeAbsolutePath(path); if (mode == WriteMode.Truncate) { return(ConnectedClient.PutFile(path)); } else if (mode == WriteMode.Append) { return(ConnectedClient.AppendFile(path)); } else if (mode == WriteMode.Overwrite) { var bytes = default(byte[]); using (var readStream = ConnectedClient.GetFile(path)) { bytes = StreamExtensions.ReadStreamToEnd(readStream); } var stream = new InMemory.InMemoryStream((data) => { using (var remoteStream = ConnectedClient.PutFile(path)) { remoteStream.Write(data, 0, data.Length); } }, bytes); return(stream); } else { throw new NotSupportedException(); } }
internal Stream OpenWrite(string virtualPath, WriteMode mode) { Action <byte[]> onClose = (data) => ConnectedClient.WriteAllBytes(virtualPath, data); if (mode == WriteMode.Truncate) { ConnectedClient.DeleteFile(virtualPath); return(new InMemory.InMemoryStream(onClose)); } else if (mode == WriteMode.Overwrite) { return(new InMemory.InMemoryStream(onClose)); } else { var bytes = default(byte[]); using (var readStream = GetStream(virtualPath)) { bytes = StreamExtensions.ReadStreamToEnd(readStream); } var stream = new InMemory.InMemoryStream(onClose, bytes); stream.Seek(stream.Length, System.IO.SeekOrigin.Begin); return(stream); } }
internal Stream OpenWrite(string virtualPath, string fileName, WriteMode mode) { Action <byte[]> onClose = (data) => Client.UploadFile(virtualPath, fileName, data); if (mode == WriteMode.Truncate) { return(new InMemory.InMemoryStream(onClose)); } else { var bytes = GetBytes(CombineVirtualPath(virtualPath, fileName)); var stream = new InMemory.InMemoryStream(onClose, bytes); if (mode == WriteMode.Append) { stream.Seek(stream.Length, System.IO.SeekOrigin.Begin); } return(stream); } }
public override Stream OpenWrite(WriteMode mode) { if (mode == WriteMode.Truncate) { // ! Workaround // if don't read before truncate, we get "a invalid stored block lengths" Exception from Ionic.Zip when reading after this.ReadAllBytes(); return new InMemory.InMemoryStream(ReplaceBytes); } else { var bytes = this.ReadAllBytes(); var stream = new InMemory.InMemoryStream(ReplaceBytes, bytes); if (mode == WriteMode.Append) { stream.Seek(stream.Length, System.IO.SeekOrigin.Begin); } return stream; } }
public override Stream OpenWrite(WriteMode mode) { if (mode == WriteMode.Truncate) { // ! Workaround // if don't read before truncate, we get "a invalid stored block lengths" Exception from Ionic.Zip when reading after this.ReadAllBytes(); return(new InMemory.InMemoryStream(ReplaceBytes)); } else { var bytes = this.ReadAllBytes(); var stream = new InMemory.InMemoryStream(ReplaceBytes, bytes); if (mode == WriteMode.Append) { stream.Seek(stream.Length, System.IO.SeekOrigin.Begin); } return(stream); } }
internal Stream OpenWrite(string virtualPath, string fileName, WriteMode mode) { Action<byte[]> onClose = (data) => Client.UploadFile(virtualPath, fileName, data); if (mode == WriteMode.Truncate) { return new InMemory.InMemoryStream(onClose); } else { var bytes = GetBytes(CombineVirtualPath(virtualPath, fileName)); var stream = new InMemory.InMemoryStream(onClose, bytes); if (mode == WriteMode.Append) { stream.Seek(stream.Length, System.IO.SeekOrigin.Begin); } return stream; } }
internal Stream OpenWrite(string virtualPath, WriteMode mode) { Action<byte[]> onClose = (data) => ConnectedClient.WriteAllBytes(virtualPath, data); if (mode == WriteMode.Truncate) { ConnectedClient.DeleteFile(virtualPath); return new InMemory.InMemoryStream(onClose); } else if (mode == WriteMode.Overwrite) { return new InMemory.InMemoryStream(onClose); } else { var bytes = default(byte[]); using(var readStream = GetStream(virtualPath)) { bytes = StreamExtensions.ReadStreamToEnd(readStream); } var stream = new InMemory.InMemoryStream(onClose, bytes); stream.Seek(stream.Length, System.IO.SeekOrigin.Begin); return stream; } }
internal System.IO.Stream OpenWrite(string virtualPath, WriteMode mode) { if (mode == WriteMode.Truncate) { return ConnectedClient.PutFile(virtualPath); } else if (mode == WriteMode.Append) { return ConnectedClient.AppendFile(virtualPath); } else // if (mode == WriteMode.Overwrite) { var bytes = default(byte[]); using (var readStream = ConnectedClient.GetFile(virtualPath)) { bytes = StreamExtensions.ReadStreamToEnd(readStream); } var stream = new InMemory.InMemoryStream((data) => CreateFileInternal(virtualPath, data), bytes); return stream; } }