c#-用于复制文件路径中的文件夹结构的函数
我需要一个简单的函数,它将以FileInfo和目标目录名称作为输入,从FileInfo获取文件路径,并将其复制到作为第二个参数传递的目标目录名称中 例如,文件路径为“d:\recordings\location1\client1\job1\file1.extc#-用于复制文件路径中的文件夹结构的函数,c#,filesystems,.net,system.io.directory,C#,Filesystems,.net,System.io.directory,我需要一个简单的函数,它将以FileInfo和目标目录名称作为输入,从FileInfo获取文件路径,并将其复制到作为第二个参数传递的目标目录名称中 例如,文件路径为“d:\recordings\location1\client1\job1\file1.ext 如果目标目录不存在,函数应在目标目录名称中创建目录,并在创建目录后复制文件。为此,我使用以下方法: public static void CreateDirectory(DirectoryInfo directory) { if (
如果目标目录不存在,函数应在目标目录名称中创建目录,并在创建目录后复制文件。为此,我使用以下方法:
public static void CreateDirectory(DirectoryInfo directory)
{
if (!directory.Parent.Exists)
CreateDirectory(directory.Parent);
directory.Create();
}
以这种方式使用它:
// path is your file path
string directory = Path.GetDirectoryName(path);
CreateDirectory(new DirectoryInfo(directory));
System.IO.Directory.CreateDirectory可用于创建最终目录,如果路径中的所有文件夹不存在,它还将自动创建这些文件夹
//Will create all three directories (if they do not already exist).
System.IO.Directory.CreateDirectory("C:\\First\\Second\\Third")
根据@NTDLS的回答,这里有一个方法可以将源复制到目标。它可以处理源是文件或文件夹的情况。函数名有点臭……请告诉我是否有更好的方法
/// <summary>
/// Copies the source to the dest. Creating any neccessary folders in the destination path as neccessary.
///
/// For example:
/// Directory Example:
/// pSource = C:\somedir\conf and pDest=C:\somedir\backups\USER_TIMESTAMP\somedir\conf
/// all files\folders under source will be replicated to destination and any paths in between will be created.
/// </summary>
/// <param name="pSource">path to file or directory that you want to copy from</param>
/// <param name="pDest">path to file or directory that you want to copy to</param>
/// <param name="pOverwriteDest">if true, files/directories in pDest will be overwritten.</param>
public static void FileCopyWithReplicate(string pSource, string pDest, bool pOverwriteDest)
{
string destDirectory = Path.GetDirectoryName(pDest);
System.IO.Directory.CreateDirectory(destDirectory);
if (Directory.Exists(pSource))
{
DirectoryCopy(pSource, pDest,pOverwriteDest);
}
else
{
File.Copy(pSource, pDest, pOverwriteDest);
}
}
// From MSDN Aricle "How to: Copy Directories"
// Link: http://msdn.microsoft.com/en-us/library/bb762914.aspx
private static void DirectoryCopy(string sourceDirName, string destDirName, bool copySubDirs)
{
DirectoryInfo dir = new DirectoryInfo(sourceDirName);
DirectoryInfo[] dirs = dir.GetDirectories();
if (!dir.Exists)
{
throw new DirectoryNotFoundException(
"Source directory does not exist or could not be found: "
+ sourceDirName);
}
if (!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destDirName);
}
FileInfo[] files = dir.GetFiles();
foreach (FileInfo file in files)
{
string temppath = Path.Combine(destDirName, file.Name);
file.CopyTo(temppath, true);
}
if (copySubDirs)
{
foreach (DirectoryInfo subdir in dirs)
{
string temppath = Path.Combine(destDirName, subdir.Name);
DirectoryCopy(subdir.FullName, temppath, copySubDirs);
}
}
}
//
///将源复制到目标。根据需要在目标路径中创建任何必要的文件夹。
///
///例如:
///目录示例:
///pSource=C:\somedir\conf和pDest=C:\somedir\backups\USER\u TIMESTAMP\somedir\conf
///源下的所有文件\文件夹都将复制到目标,并将创建两者之间的任何路径。
///
///要从中复制的文件或目录的路径
///要复制到的文件或目录的路径
///如果为true,将覆盖pDest中的文件/目录。
公共静态void FileCopyWithReplicate(字符串pSource、字符串pDest、bool pOverwriteDest)
{
字符串destDirectory=Path.GetDirectoryName(pDest);
System.IO.Directory.CreateDirectory(destDirectory);
if(Directory.Exists(pSource))
{
目录副本(pSource、pDest、pOverwriteDest);
}
其他的
{
文件副本(pSource、pDest、pOverwriteDest);
}
}
//来自MSDN Aricle“如何:复制目录”
//链接:http://msdn.microsoft.com/en-us/library/bb762914.aspx
私有静态void DirectoryCopy(字符串sourceDirName、字符串destDirName、bool copySubDirs)
{
DirectoryInfo dir=新的DirectoryInfo(sourceDirName);
DirectoryInfo[]dirs=dir.GetDirectories();
如果(!dir.存在)
{
抛出新的DirectoryNotFoundException(
“源目录不存在或找不到:”
+sourceDirName);
}
如果(!Directory.Exists(destDirName))
{
Directory.CreateDirectory(destdirename);
}
FileInfo[]files=dir.GetFiles();
foreach(文件中的文件信息文件)
{
字符串temppath=Path.Combine(destDirName,file.Name);
CopyTo(temppath,true);
}
如果(复制子文件夹)
{
foreach(目录中的目录信息子目录)
{
字符串temppath=Path.Combine(destdirename,subdir.Name);
目录副本(subdir.FullName、temppath、copySubDirs);
}
}
}
与问题类似,我正在从一个目的地复制文件夹结构,并将其复制到另一个目的地。很抱歉发布到旧线程,但它可能对最终到达此处的人有用
假设我们有一个独立的应用程序,需要将文件夹结构从输入文件夹复制到输出文件夹。输入文件夹和输出文件夹位于应用程序的根目录中
我们可以为输入文件夹(要复制的结构)创建DirectoryInfo,如下所示:
DirectoryInfo dirInput = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + "\\Input\\");
我们的输出文件夹位置可以存储在字符串中
string dirOutput = AppDomain.CurrentDomain.BaseDirectory + "\\Output\\";
这个递归方法应该为我们处理其余的问题
public static void ProcessDirectories(DirectoryInfo dirInput, string dirOutput)
{
string dirOutputfix = String.Empty;
foreach (DirectoryInfo di in dirInput.GetDirectories())
{
dirOutputfix = dirOutput + "\\" + di.Name);
if (!Directory.Exists(dirOutputfix))
{
try
{
Directory.CreateDirectory(dirOutputfix);
}
catch(Exception e)
{
throw (e);
}
}
ProcessDirectories(di, dirOutputfix);
}
}
这个方法也可以很容易地修改以处理文件,但我设计它时只考虑了我的项目中的文件夹
现在我们只需使用dirInput和dirOutput调用该方法
ProcessDirectories(dirInput, dirOutput);
我认为,如果你在这方面做得更详细一些,仅仅是一个简单的代码示例和MSDN文档的链接,并删除无关的签准,这将是一个更合理的答案。这似乎很容易理解。为什么需要一个示例。请参阅:无需解释。代码片段是enough、 此外,MSDN还特别声明:“。。它将自动创建路径中不存在的所有文件夹“,@Andy是正确的。我不明白为什么这不是公认的答案,还需要更多的细节吗?得到我的支持票。谢谢你的回答。即使我希望这是我的一个应用,而这是工作解决方案,安迪的答案更方便,所以请考虑接受它,而不是这一个。从字面上说,您不必担心自己创建路径中的所有嵌套文件夹-method System.IO.Directory.CreateDirectory()将尝试在丢失任何部分时自动创建所有文件夹。最简单的方法:请选择,以便它位于顶部,以备将来的访问者使用。目前选择的答案不必要地复杂和误导。