private void download(fastCSharp.net.tcp.commandServer.socket client, listName listName, Stream fileStream , Func <returnValue <listName>, bool> onDownload) { listName listNameState = new listName { Length = (long)(byte)fileState.NoPermission, LastWriteTime = DateTime.MinValue }; try { if (verify(client)) { FileInfo file = new FileInfo(listName.Name); listName.Set(file.FullName); if (verify(client, listName.LowerName, permissionType.Read)) { if (file.Exists) { fastCSharp.threading.threadPool.TinyPool.Start(downloader.GetDownload(onDownload, listName, fileStream)); return; } listNameState.Length = (long)(byte)fileState.FileNotFound; } } } catch (Exception error) { listNameState.Length = (long)(byte)fileState.Exception; log.Error.Add(error, null, false); } pub.Dispose(ref fileStream); onDownload(listNameState); }
private fileState upload(fastCSharp.net.tcp.commandServer.socket client, listName listName, byte[] data, int backupIdentity, bool isTimeVersion) { fileState fileState = fileState.NoPermission; try { if (verify(client)) { FileInfo file = new FileInfo(listName.Name); listName.Set(file.FullName); permission permission = getPermission(client, listName.LowerName); if (verify(permission, permissionType.Write)) { bool isFile = file.Exists; if (isFile && isTimeVersion && file.LastWriteTimeUtc > listName.LastWriteTime) { return(server.fileState.TimeVersionError); } if (!isFile || file.LastWriteTimeUtc != listName.LastWriteTime || listName.Length != file.Length) { if (isFile) { permission.Backup(file, backupIdentity); } File.WriteAllBytes(listName.Name, data); new FileInfo(listName.Name).LastWriteTimeUtc = listName.LastWriteTime; } fileState = fileState.Success; } } } catch (Exception error) { fileState = fileState.Exception; log.Error.Add(error, listName.Name, false); } return(fileState); }
private void upload(fastCSharp.net.tcp.commandServer.socket client, listName listName, Stream fileStream, int backupIdentity, bool isTimeVersion , Func <returnValue <fileState>, bool> onUpload) { fileState fileState = fileState.NoPermission; try { if (verify(client)) { FileInfo file = new FileInfo(listName.Name); listName.Set(file.FullName); permission permission = getPermission(client, listName.LowerName); if (verify(permission, permissionType.Write)) { DirectoryInfo directory = file.Directory; if (!directory.Exists) { directory.Create(); } Action upload = uploader.GetUpload(permission, onUpload, listName, fileStream, backupIdentity, isTimeVersion); onUpload = null; fileStream = null; fastCSharp.threading.threadPool.TinyPool.Start(upload); } } } catch (Exception error) { fileState = fileState.Exception; log.Error.Add(error, listName.Name, false); } pub.Dispose(ref fileStream); if (onUpload != null) { onUpload(fileState); } }
/// <summary> /// 下载文件 /// </summary> private void download() { listName listNameState = new listName { Length = (long)(byte)fileState.Exception, LastWriteTime = DateTime.MinValue }; FileStream readStream = null; try { FileInfo fileInfo = new FileInfo(listName.Name); if (fileInfo.LastWriteTimeUtc != listName.LastWriteTime || fileInfo.Length != listName.Length) { listNameState.Set(string.Empty, fileInfo.LastWriteTimeUtc, fileInfo.Length); } else { long position = fileStream.Position; readStream = new FileStream(listName.Name, FileMode.Open, FileAccess.Read, FileShare.Read); long length = readStream.Length; if (position < length) { if (position != 0) { readStream.Seek(position, SeekOrigin.Begin); } while (position < length) { int read = readStream.Read(buffer, 0, buffer.Length); if (read > 0) { fileStream.Write(buffer, 0, read); position += read; } else { break; } } } if (position == length) { listNameState.Set(fileInfo.Name, fileInfo.LastWriteTimeUtc, length); } else { listNameState.Length = (long)(byte)fileState.LengthError; } } } catch (Exception error) { listNameState.Length = (long)(byte)fileState.Exception; log.Error.Add(error, null, false); } Exception exception = null; pub.Dispose(ref readStream, ref exception); if (exception != null) { log.Error.Add(exception, null, false); if (listNameState.Name != null) { listNameState.Length = (long)(byte)fileState.Exception; listNameState.Set(null); } } push(listNameState); }