FileSqlServerSync/Server/Common/FileDirOp.cs
zerlei 09c99f4a24 style: 处理错误改为使用异常的方式
go是将错误在函数返回值处体现。其它编程语言是通过try throw catch 的方式。

按照c# 的方式去做,那么捕获异常就成为代码中必不可少的一部分。对于c++
而言,google style 建议不使用 c++ 异常,这是错误的吗?
适用异常会增加运行时开销,这是确定的。对于c++
这种默认内存不安全的语言,异常又增加了内存安全的风险。但现在我是在适用c#
所以放心的使用异常,对于c++代码,使用异常也应该是需要的,内存安全是可以避免的,除非你需要极端的性能
2024-10-12 21:59:09 +08:00

86 lines
2.4 KiB
C#

using System.Text;
namespace Common;
public abstract class FileDirOp
{
public abstract void FileCreate(string absolutePath, DateTime mtime);
public abstract void DirCreate(Dir dir, bool IsRecursion = true);
public abstract void FileModify(string absolutePath, DateTime mtime);
public abstract void FileDel(string absolutePath);
public abstract void DirDel(Dir dir, bool IsRecursion = true);
}
public class SimpleFileDirOpForTest : FileDirOp
{
public override void FileCreate(string absolutePath, DateTime mtime)
{
using (FileStream fs = System.IO.File.OpenWrite(absolutePath))
{
byte[] info = Encoding.UTF8.GetBytes($"this is {absolutePath},Now{mtime}");
fs.Write(info, 0, info.Length);
}
System.IO.File.SetLastWriteTime(absolutePath, mtime);
}
public override void FileModify(string absolutePath, DateTime mtime)
{
using (FileStream fs = System.IO.File.OpenWrite(absolutePath))
{
byte[] info = Encoding.UTF8.GetBytes($"this is {absolutePath},Now{mtime}");
fs.Write(info, 0, info.Length);
}
System.IO.File.SetLastWriteTime(absolutePath, mtime);
}
public override void FileDel(string absolutePath)
{
//ToDo 权限检查
if (System.IO.File.Exists(absolutePath))
{
System.IO.File.Delete(absolutePath);
}
}
public override void DirCreate(Dir dir, bool IsRecursion = true)
{
//TODO需做权限检查
if (!Directory.Exists(dir.FormatedPath))
{
Directory.CreateDirectory(dir.FormatedPath);
if (IsRecursion)
{
foreach (var fd in dir.Children)
{
if (fd is File file)
{
this.FileCreate(file.FormatedPath, file.MTime);
}
else if (fd is Dir sdir)
{
DirCreate(sdir);
}
}
}
}
}
public override void DirDel(Dir dir, bool IsRecursion = true)
{
//TODO 权限检查 正式徐执行递归
if (!IsRecursion)
{
if (Directory.Exists(dir.FormatedPath))
{
Directory.Delete(dir.FormatedPath, true);
}
}
else
{
throw new NotImplementedException();
}
}
}