在目录中查找文件【难度:2级】:
答案1:
using System;
using System.Linq;
using System.Collections.Generic;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
if (folder.Items.Select(x=>x.Name).Contains(fileName)) return folder.Name+"\\"+fileName;
return folder.Name+"\\"+folder.Items.OfType<Folder>().Select(x=>FindFileInFolder(x,fileName)).First(x=>x.Contains(fileName));
}
}
答案2:
using System;
using System.Linq;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
var foundFolder = folder.Items.FirstOrDefault(x => x.Name == fileName);
if (foundFolder !=null)
{
return folder.Name +"\\" +fileName;
}
var folders = folder.Items.Where(x => (x as Folder) != null).Cast<Folder>().ToList();
if (folders.Count == 0)
{
return null;
}
return folder.Name + "\\" + folders.Select(f => FindFileInFolder(f, fileName)).First(x => x != null);
}
}
答案3:
using System;
using System.Collections.Generic;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
foreach(Item item in folder.Items)
{
if(item.GetType().ToString() == "File")
{
if(item.Name == fileName)
{
return folder.Name + "\\" + fileName;
}
}
else
{
var x = FindFileInFolder((Folder)item, fileName);
if(x.Length > 0)
{
return folder.Name + "\\" + x;
}
}
}
return "";
}
}
答案4:
using System.Collections.Generic;
public class Search
{
public static string FindFileInFolder(Folder folder, string fileName, string path = "")
{
if (path == "") path = folder.Name;
foreach (var file in folder.Items)
{
if (file.Name == fileName) return path + "\\" + fileName;
if (file is Folder) return FindFileInFolder(file as Folder, fileName, path + "\\" + file.Name);
}
return "Not Found";
}
}
答案5:
using System;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
foreach(var item in folder.Items)
{
if(item is File f && f.Name == fileName)
return $"{folder.Name}\\{fileName}";
if(item is Folder fol)
{
var result = FindFileInFolder(fol, fileName);
if(result != null)
return $"{folder.Name}\\{result}";
}
}
return null;
}
}
答案6:
using System;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
string address = folder.Name + "\\";
foreach(Item i in folder.Items)
{
if(i is File)
{
if(i.Name == fileName)
{
address += i.Name;
break;
}
}
else
{
address += FindFileInFolder((Folder)i, fileName);
break;
}
}
return address;
}
}
答案7:
using System;
using System.Linq;
using System.Collections.Generic;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
string res = "";
res = Droga(folder, fileName, res);
return res;
}
public static string Droga(Folder folder, String fileName, string res)
{
res += folder.Name + "\\";
if (folder.Items.Where(x => x.GetType() == typeof(File)).Any(x => x.Name.Equals(fileName))) return res += fileName;
return Droga((Folder)folder.Items.First(x => x.GetType() == typeof(Folder)), fileName, res);
}
}
答案8:
using System;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
foreach(Item item in folder.Items)
{
if(item.Name == fileName)
return folder.Name + "\\" + fileName;
if(item is Folder)
{
string path = FindFileInFolder((Folder)item, fileName);
if(path != "")
return folder.Name + "\\" + path;
}
}
return "";
}
}
答案9:
using System;
using System.Linq;
using System.Collections.Generic;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
var path = folder.Name;
var currentFolder = folder;
var found = false;
while (!found && currentFolder != null)
{
File fileResult = currentFolder.Items?.FirstOrDefault(i => i.Name == fileName) as File;
if (fileResult != null)
{
path += $"\\{fileResult.Name}";
found = true;
}
else
{
currentFolder = currentFolder.Items?.FirstOrDefault(i => i is Folder) as Folder;
path += $"\\{currentFolder?.Name}";
}
}
return path;
}
}
答案10:
using System;
using System.Collections.Generic;
using System.Linq;
public class Search
{
public static string FindFileInFolder(Folder folder, String fileName)
{
var path = folder.Name;
var currentFolder = folder;
var found = false;
while (!found && currentFolder != null)
{
File fileResult = currentFolder.Items?.FirstOrDefault(i => i.Name == fileName) as File;
if (fileResult != null)
{
path += $"\\{fileResult.Name}";
found = true;
}
else
{
currentFolder = currentFolder.Items?.FirstOrDefault(i => i is Folder) as Folder;
path += $"\\{currentFolder?.Name}";
}
}
return path;
}
}