C# 复制文件或文件夹
C# Copy file or folder
我正在尝试编写一个程序来使多个文件夹保持同步。为此,我需要复制和删除文件和子文件夹。
对我来说,对象是文件还是文件夹都没有区别,我想创建所有必要的父文件夹并复制对象,必要时覆盖。我目前正在使用一个锯齿状的 FileSystemInfo 数组来保存我的 files/folders。
这样做的好处是可以避免重复代码来分别同步文件和文件夹。
但是,我不知道如何复制 FileSystemInfo。我正在寻找一种能够 copy/delete/read 创建或修改时间的方法,该方法适用于文件和文件夹。
FileSystemInfo 没有 Copy 或 Delete 方法,但它是 DirectoryInfo 和 FileInfo 的基础 class。
因此,当您遍历 FileSystemInfo 对象时,您必须转换为正确的具体 class 并使用特定的 copy/delete 方法。
foreach( var fsi in fileSystemInfoObjects )
{
if( fsi is DirectoryInfo )
{
var directory = (DirectoryInfo)fsi;
//do something
}
else if (fsi is FileInfo )
{
var file = (FileInfo)fsi;
//do something
}
}
我使用 sam 的回答来帮助我解决我的问题。我所做的是将复制逻辑放在我的自定义 class 中,这样我就不需要在我的代码中使用它时复制逻辑。
public class myFSInfo
{
public FileSystemInfo Dir;
public string RelativePath;
public string BaseDirectory;
public myFSInfo(FileSystemInfo dir, string basedir)
{
Dir = dir;
BaseDirectory = basedir;
RelativePath = Dir.FullName.Substring(basedir.Length + (basedir.Last() == '\' ? 1 : 2));
}
private myFSInfo() { }
/// <summary>
/// Copies a FileInfo or DirectoryInfo object to the specified path, creating folders and overwriting if necessary.
/// </summary>
/// <param name="path"></param>
public void CopyTo(string path)
{
if (Dir is FileInfo)
{
var f = (FileInfo)Dir;
Directory.CreateDirectory(path.Substring(0,path.LastIndexOf("\")));
f.CopyTo(path,true);
}
else if (Dir is DirectoryInfo) Directory.CreateDirectory(path);
}
}
我正在尝试编写一个程序来使多个文件夹保持同步。为此,我需要复制和删除文件和子文件夹。
对我来说,对象是文件还是文件夹都没有区别,我想创建所有必要的父文件夹并复制对象,必要时覆盖。我目前正在使用一个锯齿状的 FileSystemInfo 数组来保存我的 files/folders。
这样做的好处是可以避免重复代码来分别同步文件和文件夹。
但是,我不知道如何复制 FileSystemInfo。我正在寻找一种能够 copy/delete/read 创建或修改时间的方法,该方法适用于文件和文件夹。
FileSystemInfo 没有 Copy 或 Delete 方法,但它是 DirectoryInfo 和 FileInfo 的基础 class。
因此,当您遍历 FileSystemInfo 对象时,您必须转换为正确的具体 class 并使用特定的 copy/delete 方法。
foreach( var fsi in fileSystemInfoObjects )
{
if( fsi is DirectoryInfo )
{
var directory = (DirectoryInfo)fsi;
//do something
}
else if (fsi is FileInfo )
{
var file = (FileInfo)fsi;
//do something
}
}
我使用 sam 的回答来帮助我解决我的问题。我所做的是将复制逻辑放在我的自定义 class 中,这样我就不需要在我的代码中使用它时复制逻辑。
public class myFSInfo
{
public FileSystemInfo Dir;
public string RelativePath;
public string BaseDirectory;
public myFSInfo(FileSystemInfo dir, string basedir)
{
Dir = dir;
BaseDirectory = basedir;
RelativePath = Dir.FullName.Substring(basedir.Length + (basedir.Last() == '\' ? 1 : 2));
}
private myFSInfo() { }
/// <summary>
/// Copies a FileInfo or DirectoryInfo object to the specified path, creating folders and overwriting if necessary.
/// </summary>
/// <param name="path"></param>
public void CopyTo(string path)
{
if (Dir is FileInfo)
{
var f = (FileInfo)Dir;
Directory.CreateDirectory(path.Substring(0,path.LastIndexOf("\")));
f.CopyTo(path,true);
}
else if (Dir is DirectoryInfo) Directory.CreateDirectory(path);
}
}