我最近在searching directories in C#上提出了一个问题。
如果它在第4个字符串中找到它,则不会尝试接下来的15个字符串。
if (checkBox2.Checked)
{
string[] file_names = File.ReadAllLines(@"c:\dact.txt");
string path1 = @"I:\pa\test\";
string path2 = @"I:\pa\test2\";
string path3 = @"I:\pa\test3\";
string path4 = @"I:\pa\test4\";
string full = (string.Concat(path1, file_names, ".txt"));
foreach (string file_name in file_names)
if (System.IO.File.Exists(full))
{
foreach (string file in file_names)
System.IO.File.Copy(file,
@"C:\" +
textBox1.Text +
@"\\OC\" +
file_name + ".txt");
}
}
上面的代码不包含写出失败文件的能力,我不知道该怎么做。
这就是我想要的:
1.阅读文本文件的所有行
2.尝试从特定目录复制文件
3.无论文件失败,它都会将失败的文件写入文本文件
4.它读取所有新的“失败列表”,然后在我的列表中尝试第二条路径
5.重复过程到第三条路径 - 第19条路径。
答案 0 :(得分:0)
这是我的第一个想法:
String[] filesToCopy = File.ReadAllLines("yourFileHere.txt");
String sourceFolder = "yourSourceFolderHere";
String destinationFolder = "yourDestinationFolderHere";
foreach (String subFolder in Directory.GetDirectories(sourceFolder))
{
for (int i = 0; i < filesToCopy.Length; i++)
{
if (!String.IsNullOrEmpty(filesToCopy[i]))
{
if (File.Exists(Path.Combine(subFolder, filesToCopy[i])))
{
File.Copy(Path.Combine(subFolder, filesToCopy[i]), Path.Combine(destinationFolder, FilesToCopy[i]));
filesToCopy[i] = string.Empty;
}
}
}
}
using (StreamWriter strm = new StreamWriter("yourOutputFile.txt"))
{
foreach (String fileToCopy in filesToCopy)
{
if (!String.IsNullOrEmpty(fileToCopy))
strm.WriteLine(fileToCopy);
}
}
编辑:修正了错误的文件复制...
答案 1 :(得分:0)
这是我用于查找特定类型文件的简单类。
它将结果存储在Dictionaty,List&gt;其中第一个字符串是目录的完整路径名,列表是每个文件的完整路径。
之后你只需将文件复制并粘贴到另一个位置......
public class CheckForFile
{
private Dictionary<String, List<String>> FileDirectoryList;
private String StartLocation;
private String Format;
public CheckForFile(String StartLocation, String Format)
{
this.FileDirectoryList = new Dictionary<string, List<string>>();
this.StartLocation = StartLocation;
this.Format = Format;
}
public void Discover()
{
DirectoryInfo di = new DirectoryInfo(this.StartLocation);
DirectoryInfo[] ChildDirectoryList = di.GetDirectories("*", SearchOption.AllDirectories);
foreach(DirectoryInfo ChildDir in ChildDirectoryList)
{
Console.WriteLine(ChildDir.FullName);
FileInfo[] FileInfoList = ChildDir.GetFiles(this.Format);
this.FileDirectoryList.Add(ChildDir.FullName, new List<string>());
foreach (FileInfo ChildFileInfo in FileInfoList)
{
Console.WriteLine("\t\t" + ChildFileInfo.Name);
this.FileDirectoryList[ChildDir.FullName].Add(ChildFileInfo.FullName);
}
}
}