- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试通过 setInfoClass
将自定义类设置为迭代器方法:
Use this method to set a custom class which will be used when getFileInfo and getPathInfo are called. The class name passed to this method must be derived from SplFileInfo.
我的课是这样的(简化示例):
class MyFileInfo extends SplFileInfo
{
public $props = array(
'foo' => '1',
'bar' => '2'
);
}
迭代器代码是这样的:
$rit = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/some/file/path/'),
RecursiveIteratorIterator::SELF_FIRST);
自 RecursiveDirectoryIterator
通过DirectoryIterator
继承还有一个SplFileInfo
对象,它提供了 setInfoClass
方法。它没有在手册中列出,但反射显示它在那里:
shell$ php --rc RecursiveDirectoryIterator
// ...
Method [ <internal:SPL, inherits SplFileInfo> public method setInfoClass ] {
- Parameters [1] {
Parameter #0 [ <optional> $class_name ]
}
}
到这里一切都很好,但是当用
遍历目录时$rit->getInnerIterator()->setInfoClass('MyFileInfo');
foreach($rit as $file) {
var_dump( $file );
}
我得到以下奇怪的结果
object(MyFileInfo)#4 (3) {
["props"]=>UNKNOWN:0
["pathName":"SplFileInfo":private]=>string(49) "/some/file/path/someFile.txt"
["fileName":"SplFileInfo":private]=>string(25) "someFile.txt"
}
因此,当提取 MyFileInfo
时,我无法访问它的属性。如果我添加自定义方法,我可以很好地调用它们,但任何属性都是未知的。
如果我没有将信息类设置为迭代器,而是设置为 SplFileInfo 对象(如手册中的示例所示),它将给出相同的未知结果:
foreach($rit as $file) {
// $file is a SplFileInfo instance
$file->setInfoClass('MyFileInfo');
var_dump( $file->getFileInfo() );
}
但是,当我这样做时它会起作用
foreach($rit as $file) {
$file = new MyFileInfo($file);
var_dump( $file );
}
不幸的是,我想在其中使用它的代码有点复杂,并且堆叠了更多的迭代器。不能像这样创建 MyFileInfo 类。
那么,有谁知道如何让它工作或者为什么 PHP 表现如此奇怪?
谢谢。
最佳答案
不能确切地告诉你为什么,但它适用于
class MyFileInfo extends SplFileInfo
{
public $props;
public function __construct($filename) {
$this->props = array(
'foo' => '1',
'bar' => '2'
);
parent::__construct($filename);
}
}
关于php - 将自定义 FileInfo 类设置为 Iterator 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2572707/
尝试遍历已安装的 Databricks 卷中的目录时遇到 ClassCastException。 java.lang.ClassCastException: com.databricks.backen
尝试遍历已安装的 Databricks 卷中的目录时遇到 ClassCastException。 java.lang.ClassCastException: com.databricks.backen
我正在四处移动一些文件,但发现 FileInfo.Exists 并不真正起作用。在下面的示例中,将文件从“foo”移动到“bar”后,两个 FileInfo 对象似乎都是 Exist。在其他运行中,我
有没有可能转换FileInfo至 IEnumerable因为我需要发送 IEnumerable作为外部库的参数? var latestFile = new DirectoryInfo(filePath
我今天正在调试一些代码,注意到我的一个 FileInfo 对象的 LastWriteTime 早于它的 CreationTime 时间。这是可能的/预期的吗? 最佳答案 文件的这些属性可以修改为取任何
exception NoDirectory of string let dir = DirectoryInfo "c:\\" let dirExists (dir: DirectoryInfo): b
当我在正在写入的文件上调用 FileInfo(path).LastAccessTime 或 FileInfo(path).LastWriteTime 时,它返回时间文件是创建的,而不是最后一次写入(即
是否可以找到更改文件的 FileInfo.lastAccessTime 或 FileInfo.lastWriteTime 的进程? 最佳答案 正如 David 所说,我认为这是不可能的,因为我不认为这
我正在尝试使用 FileInfo 获取大文件(有些超过 1 gig)的文件大小。它有效,但需要 20 秒左右。真的,我只需要弄清楚文件是否超过一定大小,例如 100mb。有没有更快的方法来做到这一点?
想象一个 winform 应用程序,它将更新的程序集从源文件夹 A 复制到目标文件夹 B。我使用简单的 DirectoryInfo.GetFiles 方法来填充 ListView ,比较文件夹 A 和
我在 C# 中有一个方法,它以这种方式获取目录中的文件: FileInfo[] fileInfo = new DirectoryInfo(mypath).GetFiles(); 目录中的某些文件不是我
我有一个返回 FileInfo 对象的方法。调用方法后 fooFile.FullName 被调用。 一切正常,但在某些情况下 FileInfo 可以是 null,但我不希望在调用方法的地方进行(丑陋的
当执行类似 ... = myFileInfo.FullName 的操作时 - 它是访问驱动器还是通过创建 myFileInfo 加载到内存? 最佳答案 是的,它们保存在内存中 - 这是您创建 File
我目前正在开发一个控件,该控件显示文件夹中保存的所有图像,以便客户知道他们上传的内容。 我已经设置了我希望显示的属性,以便让他们了解他们上传的内容。到目前为止一切顺利,但我遇到了一个小问题。 我想做的
我有一个存储目录中文件的数组: string pathToDirectory = @"C:\files"; System.IO.DirectoryInfo diDir = new Di
我已经添加了这两个: using System; using System.IO; 在我的代码中还是找不到FileInfo 类。当我构建我的项目时。错误如下: 'FileInfo' could not
我有一个包含约 200.000 个文件条目的 FileInfo 数组。我需要找到具有相同文件名的所有文件。我需要每个重复文件的目录名和文件名作为结果,因为我想以后重命名它们。 我已经尝试过的: 用 2
每当我尝试从 php 获取 mime 内容类型时,它都会回显: Fatal error: Class 'finfo' not found in /home/jobynadel/finadel.com/
有一些文本文件,在 TextBox 和 TextBlock 中将许多字符显示为 �。 如何在.NET WPF中正确读取和显示这些文件? 文件读取,其中 fi 是 FileInfo。 fileText
在Windows资源管理器中,我右键单击DLL,选择“属性”,然后选择“版本”选项卡。 在“其他版本信息”区域的“项目名称”下,有一个名为“SVNBuildVerion”的自定义字段。 如何使用Pow
我是一名优秀的程序员,十分优秀!