|
|
@@ -21,6 +21,15 @@ public static class FileUtils {
|
|
|
File.WriteAllBytes(PathUtils.ToLongPath(filePath), content);
|
|
|
}
|
|
|
|
|
|
+ /// <summary>
|
|
|
+ /// 写入文件。
|
|
|
+ /// 如果文件或文件夹不存在,则会自动创建。若已存在,则会覆盖原文件。
|
|
|
+ /// </summary>
|
|
|
+ public static void Write(string filePath, IEnumerable<byte> content) {
|
|
|
+ DirectoryUtils.Create(filePath, isFilePath: true);
|
|
|
+ File.WriteAllBytes(PathUtils.ToLongPath(filePath), [..content]);
|
|
|
+ }
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 将 <paramref name="stream" /> 写入文件。
|
|
|
/// 会将流的位置主动重置到开头。
|
|
|
@@ -28,13 +37,31 @@ public static class FileUtils {
|
|
|
/// </summary>
|
|
|
public static void Write(string filePath, Stream stream) {
|
|
|
DirectoryUtils.Create(filePath, isFilePath: true);
|
|
|
- using FileStream fileStream = new(PathUtils.ToLongPath(filePath), FileMode.Create, FileAccess.Write);
|
|
|
+ using FileStream fileStream = OpenCreate(PathUtils.ToLongPath(filePath));
|
|
|
if (stream.CanSeek && stream.Position != 0) stream.Seek(0, SeekOrigin.Begin);
|
|
|
stream.CopyTo(fileStream);
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
+ #region FileStream
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 打开该文件的只读 <see cref="FileStream"/>。
|
|
|
+ /// </summary>
|
|
|
+ public static FileStream OpenRead(string filePath) =>
|
|
|
+ new(PathUtils.ToLongPath(filePath), FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 在指定路径创建文件,并打开 <see cref="FileStream"/>。
|
|
|
+ /// </summary>
|
|
|
+ public static FileStream OpenCreate(string filePath) {
|
|
|
+ DirectoryUtils.Create(filePath, isFilePath: true);
|
|
|
+ return new(PathUtils.ToLongPath(filePath), FileMode.Create);
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 删除文件。
|
|
|
/// </summary>
|
|
|
@@ -54,16 +81,23 @@ public static class FileUtils {
|
|
|
new(PathUtils.ToLongPath(path));
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 打开该文件的只读 <see cref="FileStream"/>。
|
|
|
+ /// 复制文件。
|
|
|
+ /// 会创建对应文件夹、覆盖已有的文件。
|
|
|
/// </summary>
|
|
|
- public static FileStream OpenRead(string filePath) =>
|
|
|
- new(PathUtils.ToLongPath(filePath), FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
|
|
+ public static void Copy(string sourceFilePath, string destFilePath) {
|
|
|
+ if (sourceFilePath == destFilePath) return; // 如果复制同一个文件则跳过
|
|
|
+ DirectoryUtils.Create(destFilePath, isFilePath: true);
|
|
|
+ File.Copy(PathUtils.ToLongPath(sourceFilePath), PathUtils.ToLongPath(destFilePath), true);
|
|
|
+ }
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 在指定路径创建文件,并打开 <see cref="FileStream"/>。
|
|
|
+ /// 剪切文件。
|
|
|
+ /// 会创建对应文件夹、覆盖已有的文件。
|
|
|
/// </summary>
|
|
|
- public static FileStream OpenCreate(string filePath) {
|
|
|
- DirectoryUtils.Create(filePath, isFilePath: true);
|
|
|
- return new(PathUtils.ToLongPath(filePath), FileMode.Create);
|
|
|
+ public static void Move(string sourceFilePath, string destFilePath) {
|
|
|
+ if (sourceFilePath == destFilePath) return; // 如果移动同一个文件则跳过
|
|
|
+ DirectoryUtils.Create(destFilePath, isFilePath: true);
|
|
|
+ File.Move(PathUtils.ToLongPath(sourceFilePath), PathUtils.ToLongPath(destFilePath));
|
|
|
}
|
|
|
+
|
|
|
}
|