在最后几天,我创建了一个方法,该方法获取文件夹中的文件和第一个子文件夹中的文件,但不包含这些子文件夹的子文件夹中的文件。
更好地解释一下:
那是文件夹:
//Folder1
//├file1.txt
//├subfolder1
//|├file2.txt
//|└subfolder3
//| └file3.txt
//└subfolder2
// └subfolder4
// └subfolder5
// └file4.txt
这就是我得到的:
//Folder1
//├file1.txt
//└subfolder1
// └file2.txt
这就是我将它复制到文件夹中的方式:
//Folder2
//├file1.txt
//├subfolder1___file2.txt
//├subfolder1___subfolder3___file3.txt
//└subfolder2___subfolder4___subfolder5___file4.txt
并告诉我如何拥有它:
//Folder2
//├file1.txt
//└subfolder1___file2.txt
(更好地理解这些结构,阅读代码)
当前代码:
private void GetFiles(string filePath)
{
//filepath = "C:\Example\folder1"
string[] installfiles = Directory.GetFiles(Path.GetDirectoryName(filePath));
string appdatafolder = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string[] SelectedFiles;
foreach (string file in installfiles)
{
string fileName = Path.GetFileName(file);
if (!Directory.Exists(appdatafolder + "\\temp"))
{
Directory.CreateDirectory(appdatafolder + "\\temp");
}
if (!File.Exists(sourcefoldervalueLabel.Text + "\\" + fileName))
{
File.Copy(filePath + filename, appdatafolder + "\\temp\\" + fileName, true);
}
}
//here I would make it recursive.
if (Directory.GetDirectories(Path.GetDirectoryName(filePath)).Length >= 1)
{
string[] subdirectoryies = Directory.GetDirectories(filePath);
foreach (string directory in subdirectoryies)
{
string[] SubFiles = Directory.GetFiles(directory);
string directoryname = Path.GetFileName(directory);
foreach (string file in SubFiles)
{
string filename = Path.GetFileName(file);
if (!File.Exists(sourcefoldervalueLabel.Text + "\\" + directoryname + "\\" + filename))
{
File.Copy(file, appdatafolder + "\\temp\\" + directoryname + "___" + filename, true); // here I copy it into Folder2 but instead of creating subfolders I add "___" between the subfolder-name and the file-name
}
}
}
}
}
因此,如果我在我设置的位置(看代码)进行递归,我可以在每个文件夹中获取文件(我想其他方法告诉我)。
所以我的问题是:
如果当前文件夹中有子文件夹,我怎样才能每次重复“标记”代码?
我希望这个问题是可以理解的(其他我会解释)。
一如既往,你可以用各种方式纠正我:)。
祝你有个美好的一天,
温和。
答案 0 :(得分:0)
这种情况的完美代码是Right Tree算法。
答案 1 :(得分:0)
好的,我在查找了一些递归编程后解决了它
最终守则:
private void GetFilesinDirectory(string directory,string targetdirectory)
{
string [] directories = Directory.GetDirectories(directory);
if(directories.Length >= 1)
{
for (int i = 0; i < directories.Length; i++)
{
GetFilesinDirectory(directories[i], targetdirectory);
}
}
string[] files = Directory.GetFiles(directory);
if (files.Length >= 1)
{
for (int i = 0; i < files.Length; i++)
{
string filename = Path.GetFileName(files[i]);
string filenamewithoutdeploy = filename.Replace(".deploy", string.Empty);
string directoryunderscoreName = directory.Replace(InstallfoldervalueLabel.Text + "\\Appfiles\\", String.Empty)
.Replace("\\","___");
string directoryname = directory.Replace(InstallfoldervalueLabel.Text + "\\Appfiles\\", String.Empty);
if (!File.Exists(sourcefoldervalueLabel.Text + "\\" + directoryname + "\\" + filenamewithoutdeploy))
{
File.Copy(directory + "\\" + filename, targetdirectory + directoryunderscoreName + "___" + filename, true);
}
}
}
}
我会很乐意得到一些更正,建议:)