/// <summary> /// 发出一次新的请求,把回应的主体内容保存到文件 /// 调用此方法会触发StatusUpdate事件 /// </summary> /// <param name="fileName">要保存的文件路径</param> /// <param name="existsAction">指定的文件存在时的选项</param> /// <returns>是否向目标文件写入了数据</returns> public bool SaveAsFile(string fileName, FileExistsAction existsAction) { byte[] data = GetBytes(); switch (existsAction) { case FileExistsAction.Overwrite: using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))) writer.Write(data); return(true); case FileExistsAction.Append: using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Append, FileAccess.Write))) writer.Write(data); return(true); default: if (!File.Exists(fileName)) { using ( BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write))) writer.Write(data); return(true); } else { return(false); } } }
private static RenameResult ExecuteRename(RenameInput input, FileExistsAction fileExistsAction) { var directoryPath = Path.GetDirectoryName(input.Path); var newFileFullPath = Path.Combine(directoryPath, input.NewFileName); switch (fileExistsAction) { case FileExistsAction.Rename: newFileFullPath = GetNonConflictingDestinationFilePath(input.Path, newFileFullPath); break; case FileExistsAction.Overwrite: if (System.IO.File.Exists(newFileFullPath)) { System.IO.File.Delete(newFileFullPath); } break; case FileExistsAction.Throw: if (System.IO.File.Exists(newFileFullPath)) { throw new IOException($"File already exists {newFileFullPath}. No file renamed."); } break; } System.IO.File.Move(input.Path, newFileFullPath); return(new RenameResult(newFileFullPath)); }
public bool SaveAsFile(string fileName, FileExistsAction existsAction) { byte[] bytes = this.GetBytes(); if (existsAction != FileExistsAction.Overwrite) { if (existsAction == FileExistsAction.Append) { using (BinaryWriter writer2 = new BinaryWriter(new FileStream(fileName, FileMode.Append, FileAccess.Write))) { writer2.Write(bytes); } return(true); } if (System.IO.File.Exists(fileName)) { return(false); } using (BinaryWriter writer3 = new BinaryWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write))) { writer3.Write(bytes); } return(true); } using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))) { writer.Write(bytes); } return(true); }
public static void STEM_Copy(string source, string destination, FileExistsAction ifExists, out string destinationFilename, int retryCount = 0, int retryDelaySeconds = 3) { if (String.IsNullOrEmpty(source)) { throw new ArgumentNullException(nameof(source)); } if (String.IsNullOrEmpty(destination)) { throw new ArgumentNullException(nameof(destination)); } STEM_Copy(source, destination, ifExists, out destinationFilename, retryCount, retryDelaySeconds, true); }
public static void STEM_Copy(string source, string destination, FileExistsAction ifExists) { if (String.IsNullOrEmpty(source)) { throw new ArgumentNullException(nameof(source)); } if (String.IsNullOrEmpty(destination)) { throw new ArgumentNullException(nameof(destination)); } string s = ""; STEM_Copy(source, destination, ifExists, out s); }
public byte[] Upload(string localPath, string remoteDirectory, string remoteFileName, FileExistsAction fileExistsAction, FTPTransferProgressEventHandler progressChanged, CancellationTokenSource cts) { string path = (remoteDirectory + (string.IsNullOrWhiteSpace(remoteFileName) ? "" : "/" + remoteFileName)); string url = UnixPathUtils.Combine(_uri.ToString(), path); Uri uri = new Uri(url); if (fileExistsAction == FileExistsAction.Overwrite) { try { Delete(Path.Combine(remoteDirectory, remoteFileName)); } catch { } } else if (fileExistsAction == FileExistsAction.Skip && FileExists(path)) { return(null); } using (WebClient client = new WebClient()) { client.Credentials = _credentials; client.UploadProgressChanged += (sender, e) => { double percent = (double)e.BytesSent / (double)e.TotalBytesToSend; double seconds = _stopWatch.ElapsedMilliseconds / 1000; double bps = 0; if (seconds > 0) { bps = e.BytesSent / seconds; } progressChanged?.Invoke(bps, percent * 100); }; cts?.Token.Register(client.CancelAsync); try { GetResponse(WebRequestMethods.Ftp.MakeDirectory, remoteDirectory); } catch { } _stopWatch = Stopwatch.StartNew(); byte[] task = client.UploadFileTaskAsync(uri, "STOR", localPath.ToString()).GetAwaiter().GetResult(); _stopWatch.Stop(); return(task); } }
/// <summary> /// 发出一次新的请求,把回应的主体内容保存到文件 /// 调用此方法会触发StatusUpdate事件 /// </summary> /// <param name="fileName">要保存的文件路径</param> /// <param name="existsAction">指定的文件存在时的选项</param> /// <returns>是否向目标文件写入了数据</returns> public bool SaveAsFile(string fileName, FileExistsAction existsAction) { byte[] data = this.GetBytes(); switch (existsAction) { case FileExistsAction.Overwrite: { using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))) { writer.Write(data); } return true; } case FileExistsAction.Append: { using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Append, FileAccess.Write))) { writer.Write(data); } return true; } default: { if (!File.Exists(fileName)) { using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write))) { writer.Write(data); } return true; } else { return false; } } } }
public AdvCopyFileOptions() { DefaultFileExistsAction = FileExistsAction.Resume; }
public static void STEM_Copy(string source, string destination, FileExistsAction ifExists, out string destinationFilename, int retryCount, int retryDelaySeconds, bool useTempHop) { _Act(source, destination, ifExists, out destinationFilename, retryCount, retryDelaySeconds, useTempHop, false); }
static void _Act(string source, string destination, FileExistsAction ifExists, out string destinationFilename, int retryCount, int retryDelaySeconds, bool useTempHop, bool isMove) { if (String.IsNullOrEmpty(source)) { throw new ArgumentNullException(nameof(source)); } if (String.IsNullOrEmpty(destination)) { throw new ArgumentNullException(nameof(destination)); } source = STEM.Sys.IO.Path.ChangeIpToMachineName(STEM.Sys.IO.Path.AdjustPath(source)); destination = STEM.Sys.IO.Path.ChangeIpToMachineName(STEM.Sys.IO.Path.AdjustPath(destination)); if (source.Equals(destination, StringComparison.InvariantCultureIgnoreCase)) { destinationFilename = destination; return; } destinationFilename = ""; if (isMove) { string sourceAddress = STEM.Sys.IO.Net.MachineAddress(STEM.Sys.IO.Path.FirstTokenOfPath(source)); string destinationAddress = STEM.Sys.IO.Net.MachineAddress(STEM.Sys.IO.Path.FirstTokenOfPath(destination)); if (sourceAddress == destinationAddress) { string sp = STEM.Sys.IO.Path.AdjustPath(source).TrimStart('\\').TrimStart('/'); if (sp.IndexOf(System.IO.Path.DirectorySeparatorChar) != -1) { sp = sp.Substring(sp.IndexOf(System.IO.Path.DirectorySeparatorChar)); } sp = STEM.Sys.IO.Path.FirstTokenOfPath(sp); string dp = STEM.Sys.IO.Path.AdjustPath(destination).TrimStart('\\').TrimStart('/'); if (dp.IndexOf(System.IO.Path.DirectorySeparatorChar) != -1) { dp = dp.Substring(dp.IndexOf(System.IO.Path.DirectorySeparatorChar)); } dp = STEM.Sys.IO.Path.FirstTokenOfPath(dp); if (sp.Equals(dp, StringComparison.InvariantCultureIgnoreCase)) { useTempHop = false; } } } while (retryCount >= 0) { if (!System.IO.File.Exists(source)) { throw new System.IO.FileNotFoundException("Could not find file " + source); } string d = destination; if (useTempHop) { string dTemp = System.IO.Path.Combine(STEM.Sys.IO.Path.GetDirectoryName(d), "Temp"); if (!System.IO.Directory.Exists(dTemp)) { System.IO.Directory.CreateDirectory(dTemp); } TempCleaner.Register(dTemp); } else { if (!System.IO.Directory.Exists(STEM.Sys.IO.Path.GetDirectoryName(d))) { System.IO.Directory.CreateDirectory(STEM.Sys.IO.Path.GetDirectoryName(d)); } } try { if (useTempHop) { string dTemp = System.IO.Path.Combine(STEM.Sys.IO.Path.GetDirectoryName(d), "Temp"); if (!System.IO.Directory.Exists(dTemp)) { System.IO.Directory.CreateDirectory(dTemp); } dTemp = System.IO.Path.Combine(dTemp, Guid.NewGuid() + ".tmp"); try { if (System.IO.File.Exists(d)) { switch (ifExists) { case FileExistsAction.Throw: throw new System.IO.IOException("Destination file already exists: " + destination); case FileExistsAction.Skip: return; case FileExistsAction.Overwrite: System.IO.File.Copy(source, dTemp, true); try { System.IO.File.SetAttributes(d, System.IO.FileAttributes.Normal); System.IO.File.Copy(dTemp, d, true); } catch (Exception ex) { throw new System.IO.IOException("Destination file could not be overwritten: " + d, ex); } break; case FileExistsAction.OverwriteIfNewer: if (System.IO.File.GetLastWriteTimeUtc(d) >= System.IO.File.GetLastWriteTimeUtc(source)) { return; } System.IO.File.Copy(source, dTemp, true); try { System.IO.File.SetAttributes(d, System.IO.FileAttributes.Normal); System.IO.File.Copy(dTemp, d, true); } catch (Exception ex) { throw new System.IO.IOException("Destination file could not be overwritten: " + d, ex); } break; case FileExistsAction.MakeUnique: d = File.UniqueFilename(destination); System.IO.File.Copy(source, dTemp, true); System.IO.File.Move(dTemp, d); break; } } else { System.IO.File.Copy(source, dTemp, true); System.IO.File.Move(dTemp, d); } destinationFilename = d; if (isMove) { while (retryCount >= 0) { try { System.IO.File.Delete(source); break; } catch { if (retryCount <= 0) { throw; } } if (retryCount > 0) { System.Threading.Thread.Sleep(retryDelaySeconds * 1000); } retryCount--; } } } finally { int retry = 3; while (retry-- > 0) { try { if (System.IO.File.Exists(dTemp)) { System.IO.File.Delete(dTemp); } break; } catch { if (retry > 0) { System.Threading.Thread.Sleep(1000); } } } } } else { if (System.IO.File.Exists(d)) { switch (ifExists) { case FileExistsAction.Throw: throw new System.IO.IOException("Destination file already exists: " + destination); case FileExistsAction.Skip: return; case FileExistsAction.Overwrite: System.IO.File.SetAttributes(d, System.IO.FileAttributes.Normal); System.IO.File.Copy(source, d, true); if (isMove) { while (retryCount >= 0) { try { System.IO.File.Delete(source); break; } catch { if (retryCount <= 0) { throw; } } if (retryCount > 0) { System.Threading.Thread.Sleep(retryDelaySeconds * 1000); } retryCount--; } } break; case FileExistsAction.OverwriteIfNewer: if (System.IO.File.GetLastWriteTimeUtc(d) >= System.IO.File.GetLastWriteTimeUtc(source)) { return; } System.IO.File.SetAttributes(d, System.IO.FileAttributes.Normal); System.IO.File.Copy(source, d, true); if (isMove) { while (retryCount >= 0) { try { System.IO.File.Delete(source); break; } catch { if (retryCount <= 0) { throw; } } if (retryCount > 0) { System.Threading.Thread.Sleep(retryDelaySeconds * 1000); } retryCount--; } } break; case FileExistsAction.MakeUnique: d = File.UniqueFilename(destination); if (isMove) { System.IO.File.Move(source, d); } else { System.IO.File.Copy(source, d); } break; } } else { if (isMove) { System.IO.File.Move(source, d); } else { System.IO.File.Copy(source, d); } } destinationFilename = d; } if (destinationFilename == d) { break; } } catch { if (retryCount <= 0) { throw; } } if (retryCount > 0) { System.Threading.Thread.Sleep(retryDelaySeconds * 1000); } retryCount--; } if (String.IsNullOrEmpty(destinationFilename)) { if (isMove) { throw new Exception("File move failed: " + source); } else { throw new Exception("File copy failed: " + source); } } }
public static void STEM_Move(string sourceDirName, string destDirName, string fileSearchPattern, string directorySearchPattern, FileExistsAction ifExists, bool expandSource, bool moveFilesOnly) { if (String.IsNullOrEmpty(sourceDirName)) { throw new ArgumentNullException(nameof(sourceDirName)); } if (String.IsNullOrEmpty(destDirName)) { throw new ArgumentNullException(nameof(destDirName)); } if (String.IsNullOrEmpty(fileSearchPattern)) { throw new ArgumentNullException(nameof(fileSearchPattern)); } if (String.IsNullOrEmpty(directorySearchPattern)) { throw new ArgumentNullException(nameof(directorySearchPattern)); } sourceDirName = STEM.Sys.IO.Path.AdjustPath(sourceDirName); destDirName = STEM.Sys.IO.Path.AdjustPath(destDirName); List <string> files = STEM_GetFiles(sourceDirName, fileSearchPattern, directorySearchPattern, System.IO.SearchOption.AllDirectories, expandSource); foreach (string f in files) { File.STEM_Copy(f, System.IO.Path.Combine(destDirName, f.Substring(sourceDirName.TrimEnd('\\', '/').Length + 1)), ifExists); try { System.IO.File.Delete(f); } catch { } } if (!moveFilesOnly) { STEM_Delete(sourceDirName, expandSource); } }
public static void STEM_Copy(string sourceDirName, string destDirName, string fileSearchPattern, string directorySearchPattern, FileExistsAction ifExists, bool expandSource) { if (String.IsNullOrEmpty(sourceDirName)) { throw new ArgumentNullException(nameof(sourceDirName)); } if (String.IsNullOrEmpty(destDirName)) { throw new ArgumentNullException(nameof(destDirName)); } if (String.IsNullOrEmpty(fileSearchPattern)) { throw new ArgumentNullException(nameof(fileSearchPattern)); } if (String.IsNullOrEmpty(directorySearchPattern)) { throw new ArgumentNullException(nameof(directorySearchPattern)); } List <string> files = STEM_GetFiles(sourceDirName, fileSearchPattern, directorySearchPattern, System.IO.SearchOption.AllDirectories, expandSource); foreach (string f in files) { File.STEM_Copy(f, System.IO.Path.Combine(destDirName, f.Substring(sourceDirName.TrimEnd('\\', '/').Length + 1)), ifExists); } }
private void ButtonCancelClick(object sender, EventArgs e) { DialogResult = DialogResult.Cancel; FileExistsAction = FileExistsAction.Cancel; Close(); }
private void ButtonReplaceClick(object sender, EventArgs e) { DialogResult = DialogResult.OK; FileExistsAction = FileExistsAction.Replace; Close(); }
public void Upload(string localPath, string remoteDirectory, string remoteFileName, FileExistsAction fileExistsAction, FTPTransferProgressEventHandler progressChanged, FTPTransferCanceledEventHandler uploadCanceled, CancellationTokenSource cts) { try { Upload(localPath, remoteDirectory, remoteFileName, fileExistsAction, progressChanged, cts); } catch (WebException e) { uploadCanceled?.Invoke(e); } }
public void Upload(string localPath, string remoteDirectory, string remoteFileName, FileExistsAction fileExistsAction) { Upload(localPath, remoteDirectory, remoteFileName, fileExistsAction, null, null, null); }
private void ButtonSkipClick(object sender, EventArgs e) { DialogResult = DialogResult.None; FileExistsAction = FileExistsAction.Skip; Close(); }
public AdvCopyFileOptions() { DefaultFileExistsAction = FileExistsAction.Resume; }
public void UploadMultiple(List <Tuple <string, string, string> > filesWithPaths, FileExistsAction fileExistsAction, FTPMultipleTransferProgressChangedEventHandler uploadProgressChanged, FTPTransferProgressEventHandler progressChanged, FTPTransferCanceledEventHandler uploadCanceled, CancellationTokenSource cts) { try { for (int i = 1; i <= filesWithPaths.Count; i++) { var item = filesWithPaths[i - 1]; Upload(item.Item1, item.Item2, item.Item3, fileExistsAction, progressChanged, cts); uploadProgressChanged.Invoke(i); } } catch (WebException exception) { uploadCanceled.Invoke(exception); } }
/// <summary> /// 发出一次新的请求,把回应的主体内容保存到文件 /// 调用此方法会触发StatusUpdate事件 /// </summary> /// <param name="fileName">要保存的文件路径</param> /// <param name="existsAction">指定的文件存在时的选项</param> /// <returns>是否向目标文件写入了数据</returns> public async Task<bool> SaveAsFile(string fileName, FileExistsAction existsAction) { byte[] data = await GetBytes(); switch (existsAction) { case FileExistsAction.Overwrite: using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))) writer.Write(data); return true; case FileExistsAction.Append: using (BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Append, FileAccess.Write))) writer.Write(data); return true; default: if (!File.Exists(fileName)) { using ( BinaryWriter writer = new BinaryWriter(new FileStream(fileName, FileMode.Create, FileAccess.Write))) writer.Write(data); return true; } else { return false; } } }
public static void STEM_Move(string sourceDirName, string destDirName, string fileSearchPattern, string directorySearchPattern, FileExistsAction ifExists, bool expandSource) { if (String.IsNullOrEmpty(sourceDirName)) { throw new ArgumentNullException(nameof(sourceDirName)); } if (String.IsNullOrEmpty(destDirName)) { throw new ArgumentNullException(nameof(destDirName)); } if (String.IsNullOrEmpty(fileSearchPattern)) { throw new ArgumentNullException(nameof(fileSearchPattern)); } if (String.IsNullOrEmpty(directorySearchPattern)) { throw new ArgumentNullException(nameof(directorySearchPattern)); } STEM_Move(sourceDirName, destDirName, fileSearchPattern, directorySearchPattern, ifExists, false, expandSource); }