project1
MyClass.cs
/*
* Created by SharpDevelop.
* User: wangl
* Date: 2020/03/09
* Time: 16:57
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System.Windows.Forms;
using System.IO;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Linq;
using System.Reflection;
namespace project1
{
/// <summary>
/// Description of MyClass.
/// </summary>
interface ISearchInter
{
String SearchByName(String type,String path,String key);
}
public abstract class Search : ISearchInter
{
public String SearchByName(String type,String path,String key){
if(path != "")
{
Regex regex = new Regex(@"^([a-zA-Z]:\\)?[^\/\:\*\?\""\<\>\|\,]+$");
bool m = regex.IsMatch(path);
if(!m)
{
MessageBox.Show("入力文字列の形式が正しくありません。");
}
}
DirectoryInfo dir = new DirectoryInfo(path);
List<FileInfo> list = new List<FileInfo>();
foreach(FileInfo file in dir.GetFiles())
{
list.Add(file);
}
Type t = Type.GetType(type);
Object obj = Activator.CreateInstance(t);
MethodInfo method1 = t.GetMethod("keyFile",BindingFlags.Public | BindingFlags.Instance,null,new Type[]{typeof(List<FileInfo>),typeof(String)},null);
Object result1 = method1.Invoke(obj,new Object[]{list,key});
MethodInfo method2 = t.GetMethod("sortKey",BindingFlags.Public | BindingFlags.Instance,null,new Type[]{typeof(List<FileInfo>)},null);
Object result2 = method2.Invoke(obj,new Object[]{result1});
String result = null;
foreach(String str in result2 as List<String>)
{
result = result + str + "\r\n";
}
return result;
}
public virtual List<FileInfo> keyFile(List<FileInfo> list,String key)
{
List<FileInfo> keyList = new List<FileInfo>();
foreach(FileInfo str in list){
if(str.Name.Contains(key)){
keyList.Add(str);
}
}
return keyList;
}
public abstract List<String> sortKey (List<FileInfo> list);
}
public class wangLin : Search
{
public override List<FileInfo> keyFile(List<FileInfo> list,String key) {
List<FileInfo> keyList = new List<FileInfo>();
foreach(FileInfo ex in list){
String extension = Path.GetExtension(ex.Name);
if(extension == key){
keyList.Add(ex);
}
}
return keyList;
}
public override List<String> sortKey (List<FileInfo> list){
List<String> toStrList = new List<String>();
foreach(FileInfo file in list){
toStrList.Add(file.Name);
}
List<String> sortList = toStrList.OrderBy(m => m).ToList();
List<String> result = new List<String>();
if(sortList.Count>10){
for(int i = 0;i<10;i++){
result.Add(sortList[i]);
}
} else {
result = sortList;
}
return result;
}
}
public class sortTest : Search {
public override List<String> sortKey (List<FileInfo> list) {
List<String> lenList = new List<string>();
foreach(FileInfo file in list){
lenList.Add(file.Length.ToString());
}
return lenList.OrderByDescending(x=>x).ToList();
}
}
public class keyTest2 : Search {
public override List<FileInfo> keyFile(List<FileInfo> list,String key) {
List<FileInfo> keyList = new List<FileInfo>();
foreach(FileInfo ex in list){
String extension = Path.GetExtension(ex.Name);
if(extension == key){
keyList.Add(ex);
}
}
return keyList;
}
public override List<String> sortKey (List<FileInfo> list){
List<String> toStrList = new List<String>();
foreach(FileInfo file in list){
toStrList.Add(file.Name);
}
List<String> sortList = toStrList.OrderBy(m => m).ToList();
return sortList;
}
}
}
project2
Class1.cs
/*
* Created by SharpDevelop.
* User: wangl
* Date: 2020/03/09
* Time: 16:57
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using project1;
namespace project2
{
/// <summary>
/// Description of Class1.
/// </summary>
public class Factory
{
public Factory()
{
}
public Search CreateClass(String classType){
Search search = null;
switch(classType){
case "project1.wangLin":
{
search = new wangLin();
}
break;
case "project1.sortTest":
{
search = new sortTest();
}
break;
case "project1.keyTest2":
{
search = new keyTest2();
}
break;
}
return search;
}
}
}
Class2.cs
/*
* Created by SharpDevelop.
* User: wangl
* Date: 2020/03/09
* Time: 16:57
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
namespace project2
{
/// <summary>
/// Description of Class2.
/// </summary>
public class Class2
{
public Class2()
{
}
private String path ;
private String keyWord ;
private String type;
public String Path
{
set {path = value;}
get {return path;}
}
public String KeyWord
{
set {keyWord = value;}
get {return keyWord;}
}
public String Type
{
set {type = value;}
get {return type;}
}
}
}
Program.cs
/*
* Created by SharpDevelop.
* User: wangl
* Date: 2020/03/09
* Time: 16:57
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using System.Windows.Forms;
namespace project2
{
/// <summary>
/// Class with program entry point.
/// </summary>
internal sealed class Program
{
/// <summary>
/// Program entry point.
/// </summary>
[STAThread]
private static void Main(string[] args)
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
}
}