php小代码----目录下读取子文件或子目录

<?php

class RecDir {

    protected $rootPath;
    protected $opDirectory;

    const RECDIR_MIXED = ‘mixed‘;
    const RECDIR_DIR = ‘dir‘;
    const RECDIR_FILE = ‘file‘;

    public $errorMsg = ‘‘;
    public $errorNo = 0;

    public function __construct($rootPath) {
        $this->rootPath = $rootPath;
        if (is_dir($this->rootPath)) {
            $this->rootPath = pathinfo($this->rootPath, PATHINFO_DIRNAME) . DIRECTORY_SEPARATOR . pathinfo($this->rootPath, PATHINFO_BASENAME);
            $this->opDirectory = dir($this->rootPath);
        } else {
            $this->errorMsg = ‘您提供的目录不存在!‘;
            $this->errorNo = 1001;
            throw new Exception($this->errorMsg, $this->errorNo);
        }
    }

    private function read($directory, $parentPath, $modeInfo = ‘mixed‘, $defaultDir = false, $fullPath = false) {
        $dirInfo = array();
        while (FALSE !== ($childDirOrFileName = $directory->read())) {
            switch ($modeInfo) {
                case self::RECDIR_MIXED:
                    if ($defaultDir) {
                        $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;
                    } else {
                        if ($childDirOrFileName != ‘.‘ && $childDirOrFileName != ‘..‘) {
                            $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;
                        }
                    }
                    break;
                case self::RECDIR_DIR:
                    if (is_dir($parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName)) {
                        if ($defaultDir) {
                            $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;
                        } else {
                            if ($childDirOrFileName != ‘.‘ && $childDirOrFileName != ‘..‘) {
                                $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;
                            }
                        }
                    }
                    break;
                case self::RECDIR_FILE:
                    if (is_file($parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName)) {
                        $dirInfo[] = $fullPath ? $parentPath . DIRECTORY_SEPARATOR . $childDirOrFileName : $childDirOrFileName;
                    }
                    break;
            }
        }
        return $dirInfo;
    }
     /**
      * (PHP 5 >= 5.4.0)<br/>
      * 得到目录下的直接子目录或直接子文件信息
      * @param string $modeInfo[可选]<p>
      * 返回目录下信息的模式
      * mixed  返回所有的文件名及目录名
      * dir    返回所有的目录名
      * file   返回所有的文件名
      * </p>
      * @param bool $defaultDir[可选]<p>
      * 是否包括默认的链接目录..和.
      * false  不包括
      * true   包括
      * </p>
      * @param bool $fullPath[可选]<p>
      * 是否返回子文件或目录的路径信息
      * true  是
      * false 否
      * <p>
      * @return array 返回一个数组,记录了该目录下的信息
      */
    public function getPathDirectDirInfo($modeInfo = ‘mixed‘, $defaultDir = false, $fullPath = false) {
        return $this->read($this->opDirectory, $this->rootPath, $modeInfo, $defaultDir, $fullPath);
    }    
}

//----------------------------test-----------------------------------------
header("Content-type:text/html; charset=UTF-8");
try {
    $recDir = new RecDir(‘./CALLTEMP/‘);
    $dirs = $recDir->getPathDirectDirInfo(‘file‘, true, true);
    var_dump($dirs);
} catch (Exception $ex) {
    echo ‘在文件【‘ . $ex->getFile() . ‘】中的第‘ . $ex->getLine() . ‘行报错:‘ . $ex->getMessage() . ‘(‘ . $ex->getCode() . ‘)‘;
}
时间: 2024-10-10 04:54:48

php小代码----目录下读取子文件或子目录的相关文章

用glob()函数返回目录下的子文件以及子目录

glob() 函数返回匹配指定模式的文件名或目录 相对于readdir()和opendir()来说,使用glob()函数会方便很多 代码1: 1 <?php 2 function getfilename($path){ 3 foreach(glob($path) as $filename) 4 echo $filename.'<br>'; 5 } 6 getfilename('./*'); 7 ?> 运行结果: 代码2: 1 <?php 2 print_r(glob('./*

php递归查找指定目录下及子文件名称是否包含中文空格及括号

1 //php递归查找该目录下及子文件名称是否包含中文空格括号 2 function searchDir($path,&$data){ 3 if(is_dir($path)){ 4 $dp=dir($path); 5 while($file=$dp->read()){ 6 if($file!='.'&& $file!='..'){ 7 searchDir($path.'/'.$file,$data); 8 } 9 } 10 $dp->close(); 11 } 12 i

golang 获取指定目录下的子文件列表

获取指定目录下的子文件列表 package main import "fmt" import "io/ioutil" func main() { dir_list, e := ioutil.ReadDir("C:/Documents and Settings/xxx/Desktop/Copy of change-sub") if e != nil { fmt.Println("read dir error") return }

.Net 遍历目录下的子文件夹和文件

今天再完成一道任务的时候需要遍历得到所有txt文件,搜索很久终于得到了一个很方便的方法. foreach (string o in Directory.GetDirectories(@"D:\Logs") { foreach (string i in Directory.GetFiles(o)) { FileInfo fi = new FileInfo(i); if (fi.Extension.Equals(".txt")) { //这里我就可以操作我得到的满足条件

java 获取某路径下的子文件/子路径

/** * 获取某路径下的子文件 * */ public static List<String> getSubFile(String path){ List<String> subFile = new ArrayList<>(); File file=new File(path); //确保该路径存在 if(file.exists()){ File[] tempList = file.listFiles(); //有子文件时 if (tempList.length>

asp.net 遍历文件夹下全部子文件夹并绑定到gridview上

遍历文件夹下所有子文件夹,并且遍历配置文件某一节点中所有key,value并且绑定到GridView上 C#代码   Helper app_Helper = new Helper(); DataSet ds = new DataSet(); DataTable dt = new DataTable(); protected void Page_Load(object sender, EventArgs e) { gvwBind(); } #region 绑定GridView /// <summa

Java读取指定目录下的所有文件(子目录里的文件也可递归得到)

1 import java.io.File; 2 3 public class ReadFile { 4 5 public static void main(String[] args) { 6 7 // path是指定目录的绝对路径 8 String path = "/Users/tonychan/Workspaces/MyEclipse 2017 CI/Zhangjiajie/WebRoot/pics"; 9 getFile(path); 10 11 } 12 13 // 给定目录

【转】java 文件 读取目录下的所有文件(包括子目录)

转自:http://www.cnblogs.com/pricks/archive/2009/11/11/1601044.html import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class test { public static void main(String[] args)

Python扫描指定文件夹下(包含子文件夹)的文件

扫描指定文件夹下的文件.或者匹配指定后缀和前缀的函数. 假设要扫描指定文件夹下的文件,包含子文件夹,调用scan_files("/export/home/test/") 假设要扫描指定文件夹下的特定后缀的文件(比方jar包),包含子文件夹,调用scan_files("/export/home/test/", postfix=".jar") 假设要扫描指定文件夹下的特定前缀的文件(比方test_xxx.py).包含子文件夹,调用scan_files