如何在文件前面添加文件夹名,而不是创建文件夹名

本文关键字:文件夹 创建 文件 前面 添加 | 更新日期: 2023-09-27 18:17:29

我试图将文件夹中的所有内容复制到另一个文件夹,但我尝试不在targetpath中创建子文件夹,而是尝试在源路径中取子文件夹的名称,并将其添加到tagetpath的前面,并在它们之间设置下划线

的做法

sourcefolder
├file1.txt
├subfolder1
|└file2.txt
└subfolder2
 ├subfolder3
 |└file3.txt
 └subfolder4
  └file4.txt

到达:

 targetfolder:
 ├file1.txt
 ├subfolder1_file2.txt
 ├subfolder2_subfolder3_file3.txt
 ├subfolder2_subfolder4_file4.txt

目前我只是通过文件夹获取:

foreach (string dirPath in Directory.GetDirectories(sourcePath, "*", SearchOption.AllDirectories))
{
    Directory.CreateDirectory(dirPath.Replace(sourcePath, targetPath));
}
foreach (string srcPath in Directory.GetFiles(sourcePath, "*.*", SearchOption.AllDirectories))
{
    newPath = srcPath.Replace(sourcePath, targetPath);
    File.Copy(srcPath, newPath, true);
}

我试过了:

private void showDeletefiles(string filePath)
    {
        string[] installfiles = Directory.GetFiles(Path.GetDirectoryName(filePath));
        string[] subfolders = Directory.GetDirectories(Path.GetDirectoryName(filePath));
        string appdatafolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        int i = 0;
        foreach (string file in installfiles)
        {
            string fileName = Path.GetFileName(file);
            string fileextension = Path.GetExtension(fileName);
                if (!File.Exists(sourcefoldervalueLabel + file) && fileextension != ".manifest")
                {
                    File.Copy(filePath + fileName, appdatafolder+ fileName, true);
                }
                if (subfolders.Length >= 0)
                {
                    string[] subfolderfiles = Directory.GetFiles(subfolders[i]);
                    string foldername = Path.GetFileName(subfolders[i]);
                    i++;

                    foreach (string subfiles in subfolderfiles)
                    {
                        File.Copy(filePath + fileName, appdatafolder + foldername + "_" + subfiles, true);
                    }
                }
            }
       }

问题是我只进入第一个"子文件夹"

如何在文件前面添加文件夹名,而不是创建文件夹名

您可以从每个字符串生成FileInfo对象并从中提取适当的信息。这应该工作,假设你有一个路径"DirectoryLetter:'Folder'Files"或"DirectoryLetter:'Files"。注意,这显然不是使用string.Replace时最有效的代码,当然,这必须在所有常见场景下进行测试。

var fileInfos = Directory.GetFiles(@"DirectoryToTraverseHere", "*.*", SearchOption.AllDirectories)
                         .Select(file => new FileInfo(file));
foreach (var fileInfo in fileInfos)
{
   string newFileInfo;
   if (fileInfo.Directory.Parent.Name == fileInfo.Directory.Root.Name)
   {
      newFileInfo = string.Format("{0}_{1}", fileInfo.Directory.FullName, fileInfo.Name);
   }
   else
   {
      newFileInfo = string.Format("{0}_{1}{2}", fileInfo.Directory.Parent.FullName, 
                                              fileInfo.Directory.Name, 
                                              fileInfo.Name);
   }
   File.Copy(fileInfo.FullName, Path.Combine("TargetDirectory", newFileName));
}

我自己解决了我的问题:

代码:

    string[] installfiles = Directory.GetFiles(Path.GetDirectoryName(filePath));
        string[] subfolders = Directory.GetDirectories(Path.GetDirectoryName(filePath));
        string appdatafolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        int i = 0;
        foreach (string file in installfiles)
        {
            string fileName = Path.GetFileName(file);
            string fileextension = Path.GetExtension(fileName);
            if (!Directory.Exists(appdatafolder))
            {
                Directory.CreateDirectory(appdatafolder);
            }
                File.Copy(filePath + fileName, appdatafolder + fileName, true);
            if (subfolders.Length >= 0 && i < subfolders.Length)
            {
                string[] subfolderfiles = Directory.GetFiles(subfolders[i]);
                string foldername = Path.GetFileName(subfolders[i]);
                i++;
                foreach (string subfiles in subfolderfiles)
                {
                    string subfilesname = Path.GetFileName(subfiles);
                    File.Copy(filePath + fileName, appdatafolder + foldername + "_" + subfilesname, true);
                }
            }
        }

这就是我需要它的方式,希望它能帮助你:)