如何在文件前面添加文件夹名,而不是创建文件夹名
本文关键字:文件夹 创建 文件 前面 添加 | 更新日期: 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);
}
}
}
这就是我需要它的方式,希望它能帮助你:)