Jmouse.JFiles 代码(C#)

using  System;
using
 System.IO;

namespace
 Jmouse
{
    
public class
 JFiles
    
{
        
public enum JSearchOptions { AllDirectories, OnlyTopDirectory }
;
        
public enum JPatternOptions { OnlyFiles, OnlyDirectories, Both }
;

        
protected virtual void SetDirMethod(string
[] path)
        
{ }


        
protected virtual void SetFileMethod(string[] path)
        
{ }


        
protected virtual void SetErrorMethod(string path, Exception e)
        
{ }


        
protected virtual void SetErrorMethod(string path, 
            
string
 searchPattern, Exception e)
        
{ }


        
public int Search(string path)
        
{
            
int SearchFailed = -1
;
            
try

            
{
                
string[] dirs =
 Directory.GetDirectories(path);
                SetDirMethod(dirs);
                
if (dirs.Length > 0
)
                
{
                    
for (int i = 0; i < dirs.Length; i++
)
                    
{
                        
try

                        
{
                            SearchFailed 
+=
 Search(dirs[i]);
                        }

                        
catch (Exception e)
                        
{
                            SearchFailed
++
;
                            SetErrorMethod(path, e);
                            
continue
;
                        }

                    }

                }

                
string[] files = Directory.GetFiles(path);
                SetFileMethod(files);
                
return (SearchFailed + 1
);
            }

            
catch (Exception e)
            
{
                SetErrorMethod(path, e);
            }

            
return SearchFailed;
        }


        
public int Search(string path, JSearchOptions searchOptions)
        
{
            
int SearchFailed = -1
;
            
try

            
{
                
string[] dirs =
 Directory.GetDirectories(path);
                SetDirMethod(dirs);
                
if (searchOptions ==
 JSearchOptions.AllDirectories)
                
{
                    
if (dirs.Length > 0
)
                    
{
                        
for (int i = 0; i < dirs.Length; i++
)
                        
{
                            
try

                            
{
                                SearchFailed 
+=
 Search(dirs[i], 
                                    searchOptions);
                            }

                            
catch (Exception e)
                            
{
                                SearchFailed
++
;
                                SetErrorMethod(path, e);
                                
continue
;
                            }

                        }

                    }

                }

                
string[] files = Directory.GetFiles(path);
                SetFileMethod(files);
                
return (SearchFailed + 1
);
            }

            
catch (Exception e)
            
{
                SetErrorMethod(path, e);
            }

            
return SearchFailed;
        }


        
public int Search(string path, string searchPattern, 
            JPatternOptions patternOptions)
        
{
            
int SearchFailed = -1
;
            
try

            
{
                
string[] dirs = new string[0
];
                
string[] files = new string[0
];
                
if ((patternOptions == JPatternOptions.Both) ||
 
                    (patternOptions 
==
 JPatternOptions.OnlyDirectories))
                
{
                    dirs 
=
 Directory.GetDirectories(path, searchPattern);
                }

                
else
                
{
                    dirs 
=
 Directory.GetDirectories(path);
                }

                SetDirMethod(dirs);
                
if (dirs.Length > 0)
                
{
                    
for (int i = 0; i < dirs.Length; i++
)
                    
{
                        
try

                        
{
                            SearchFailed 
+=
 Search(dirs[i], 
                                searchPattern, 
                                patternOptions);
                        }

                        
catch (Exception e)
                        
{
                            SetErrorMethod(path, searchPattern, e);
                            SearchFailed
++
;
                            
continue
;
                        }

                    }

                }

                
if ((patternOptions == JPatternOptions.Both) || 
                    (patternOptions 
==
 JPatternOptions.OnlyFiles))
                
{
                    files 
=
 Directory.GetFiles(path, searchPattern);
                }

                
else
                
{
                    files 
=
 Directory.GetFiles(path);
                }

                SetFileMethod(files);
                
return (SearchFailed + 1);
            }

            
catch (Exception e)
            
{
                SetErrorMethod(path, searchPattern, e);
            }

            
return SearchFailed;
        }


        
public int Search(string path, string searchPattern, 
            JPatternOptions patternOptions, JSearchOptions searchOptions)
        
{
            
int SearchFailed = -1
;
            
try

            
{
                
string[] dirs = new string[0
];
                
string[] files = new string[0
];
                
if ((patternOptions == JPatternOptions.Both) ||
 
                    (patternOptions 
==
 JPatternOptions.OnlyDirectories))
                
{
                    dirs 
=
 Directory.GetDirectories(path, searchPattern);
                }

                
else
                
{
                    dirs 
=
 Directory.GetDirectories(path);
                }

                SetDirMethod(dirs);
                
if (searchOptions == JSearchOptions.AllDirectories)
                
{
                    
if (dirs.Length > 0
)
                    
{
                        
for (int i = 0; i < dirs.Length; i++
)
                        
{
                            
try

                            
{
                                SearchFailed 
+=
 Search(dirs[i], 
                                    searchPattern, 
                                    patternOptions, 
                                    searchOptions);
                            }

                            
catch (Exception e)
                            
{
                                SetErrorMethod(path, 
                                    searchPattern, 
                                    e);
                                SearchFailed
++
;
                                
continue
;
                            }

                        }

                    }

                }

                
if ((patternOptions == JPatternOptions.Both) || 
                    (patternOptions 
==
 JPatternOptions.OnlyFiles))
                
{
                    files 
=
 Directory.GetFiles(path, searchPattern);
                }

                
else
                
{
                    files 
=
 Directory.GetFiles(path);
                }

                SetFileMethod(files);
                
return (SearchFailed + 1);
            }

            
catch (Exception e)
            
{
                SetErrorMethod(path, searchPattern, e);
            }

            
return SearchFailed;
        }

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值