<?php
/**
* ファイルクラス
*
* PHP version 5
*
* @package    filters
* @author     stk2k <stk2k@sazysoft.com>
* @copyright  2008 stk2k, sazysoft
*/

class File extends Object
{
	private $_path;

	/*
	 *    コンストラクタ
	 */
	public function __construct( String $path )
	{
		parent::__construct();

		$this->_path = "$path";
	}

	/*
	 *    読み取り可能か
	 */
	public function canRead()
	{
		return is_readable($this->_path);
	}

	/*
	 *    書き込み可能か
	 */
	public function canWrite()
	{
		return is_writeable( $this->_path );
	}

	/*
	 *    削除
	 */
	public function delete()
	{
		return unlink( $this->_path );
	}

	/*
	 *    抽象パスを取得
	 */
	public function getPath()
	{
		return $this->_path;
	}

	/*
	 *    ファイルか
	 */
	public function isFile()
	{
		return is_file( $this->_path );
	}

	/*
	 *    ディレクトリか
	 */
	public function isDir()
	{
		return is_dir( $this->_path );
	}

	/*
	 *    ディレクトリか
	 */
	public function isDirectory()
	{
		return is_dir( $this->_path );
	}

	/*
	 *    ファイルまたはディレクトリが存在するか
	 */
	public function exists()
	{
		return file_exists( $this->_path );
	}

	/*
	 *    絶対パスを取得
	 */
	public function getAbsolutePath()
	{
		return realpath( $this->_path );
	}

	/*
	 *    ファイル名を取得
	 */
	public function getName()
	{
		return basename( $this->_path );
	}

	/*
	 *    ファイルが格納されているディレクトリ名を取得
	 */
	public function getDirName()
	{
		return dirname( $this->_path );
	}

	/*
	 *    空のディレクトリを作成
	 */
	public function makeDirectory( $drilldown = FALSE )
	{
		if ( $drilldown ){
			$path = $this->_path;

			$dirs = explode( '/', $path );
			array_shift($dirs);		// 先頭の/の前は捨てる

			$path = '/';
			while( ($dir=array_shift($dirs)) !== NULL ){
				if ( strlen($path) > 1 ){
					$path .= '/';
				}
				$path .= "$dir";
				if ( !file_exists($path) ){

					if ( !mkdir($path) ){
						_throw( new MakeDirectoryException($path) );
					}
				}
			}
		}
		else{
			if ( !mkdir( $this->_path ) ){
				_throw( new MakeDirectoryException($this->_path) );
			}
		}
	}




}

return __FILE__;