我正在尝试创建一个扫描文件夹以查找子文件夹的函数,然后返回一个包含这些文件夹名称的数字数组.
这是我用于测试的代码.一旦我得到它打印出文件夹名称而不仅仅是"." 对于当前和以上文件夹的".."都会很好,我可以完成这个功能.
<?php
function super_l_getthemes($dir="themes")
{
if ($handle = opendir($dir)) {
echo "Handle: {$handle}\n";
echo "Files:\n";
while (false !== ($file = readdir($handle))) {
echo "{$file}<br>";
}
closedir($handle);
}
?>
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,并打印出文件夹的所有内容:文件,子文件夹和"." 和"......"
但如果我更换:
while (false !== ($file = readdir($handle))) {
echo "{$file}<br>";
}
Run Code Online (Sandbox Code Playgroud)
有:
while (false !== ($file = readdir($handle))) {
if(file_exists($file) && is_dir($file)){echo "{$file}";}
}
Run Code Online (Sandbox Code Playgroud)
该功能仅打印"." 和"..",而不是我想要打印的两个文件夹名称.
任何帮助表示赞赏.
我们在一个相当大的系统中使用EF4,偶尔会遇到问题,因为EF4无法将某些表达式转换为SQL.目前,我们要么需要做一些花哨的步法(DB/Code),要么只接受性能命中并允许查询在内存中执行.
毋庸置疑,这些都不是理想的,我们有时不得不使用的黑客降低了可读性/可维护性.
我们理想的是一种扩展EF4 SQL提供程序的SQL生成功能的方法.显然有一些像.Net方法调用这样的东西总是必须是客户端的,但是像日期比较这样的一些功能(例如[Linq to Entities中的分组周数]应该是可行的.
我用Google搜索了,但也许我使用了错误的术语,因为我得到的是有关EF4 SQL生成新功能的信息.
对于这样一个灵活且可扩展的框架,如果不可能,我会感到惊讶.在我的脑海中,我想象从[SQL 2008]提供程序继承并扩展它以处理表达式树中的其他表达式/类似,它被赋予转换为SQL.
任何帮助/指针赞赏.
我们使用的是VS2010 Ultimate,.Net 4(非客户端配置文件)和EF4.该应用程序在ASP.Net中,并在64位环境中运行,以防它有所作为.
更新:回应一些澄清要求;
我们使用的是代码优先方法,并有一个控制台应用程序,可以创建数据库并填充一些参考表.
我宁愿远离存储过程,除非它们也可以以类似的方式生成 - 目前,根据需要生成新版本的数据库,并且单独的进程迁移/同步数据.我们目前关于数据库的所有事情都使用实体.我承认我无法给出一个很好的理由,但在这种情况下运行SQL脚本来生成存储过程感觉不对 - 但如果我弄错了,请纠正我.
关于特定的场景,我担心如果不经过长时间的繁文缛节练习,我就无法从代码中提供一个 - 上面提到的链接就是我们想要完成的事情的一个很好的例子.在此示例中,实现允许日期算术的机制:
DateTime firstDay = GetFirstDayOfFirstWeekOfYear();
var userTimes = from t in context.TrackedTimes
group t by new {t.User.UserName, WeekNumber = (t.TargetDate - firstDay).Days / 7} into ut
select new
{
UserName = ut.Key.UserName,
WeekNumber = ut.Key.WeekNumber,
Minutes = ut.Sum(t => t.Minutes)
};
Run Code Online (Sandbox Code Playgroud)
我可以看到一种方法,这可以使用SQL单独完成,但不能使用LINQ-To-Entities(服务器端)来完成.
我有以下输入字符串:
key1 = "test string1" ; key2 = "test string 2"
Run Code Online (Sandbox Code Playgroud)
我需要将其转换为以下内容而不进行标记化
key1="test string1";key2="test string 2"
Run Code Online (Sandbox Code Playgroud) 我需要在我的iPad项目中使用Three20.我想知道iPhone版的Three20项目是否可以在iPad上直接使用,还是我们应该等待这个时间线完成:
http://three20.info/timeline/roadmap
OS 3.2中是否有Three20的替代品?
谢谢,拉吉
我面临一个拥挤的组合框(5000件)的性能问题.下拉列表的渲染非常慢(就像在显示任何项目之前计算所有项目一样).
你有什么技巧可以让这个下拉显示变得懒惰吗?
Xaml代码:
<Grid x:Name="LayoutRoot">
<StackPanel Orientation="Horizontal" Width="200" Height="20">
<TextBlock>Test Combo </TextBlock>
<ComboBox x:Name="fooCombo" Margin="5,0,0,0"></ComboBox>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
代码背后:
public MainPage(){InitializeComponent();
List<string> li = new List<string>();
int Max = 5000;
for (int i = 0; i < Max; ++i)
li.Add("Item - " + i);
fooCombo.ItemsSource = li;
}
Run Code Online (Sandbox Code Playgroud)
好吧,Combobox UI虚拟化中似乎存在一个错误,因此自动完成框应该是可行的方法.
我们有一个xml节点"item",其属性为"style",即"Header1".但是这种风格可以改变.我们有一个名为Header1的属性集,它定义了在xsl:fo生成的PDF中的外观.
这是有效的(在fo:table-cell节点中内联提到了use-attribute-sets):
<xsl:template match="item[@type='label']">
<fo:table-row>
<fo:table-cell xsl:use-attribute-sets="Header1">
<fo:block>
<fo:inline font-size="8pt" >
<xsl:value-of select="." />
</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
但这不是(使用xsl:属性,因为@style属性也可以是Header2).它不会生成错误,会创建PDF,但不会应用属性.
<xsl:template match="item[@type='label']">
<fo:table-row>
<fo:table-cell>
<xsl:attribute name="xsl:use-attribute-sets">
<xsl:value-of select="@style" />
</xsl:attribute>
<fo:block>
<fo:inline font-size="8pt" >
<xsl:value-of select="." />
</fo:inline>
</fo:block>
</fo:table-cell>
</fo:table-row>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?我们如何实现这一目标,最好不要长xsl:if或xsl:什么时候?
什么是大量(数万)9个正双精度值组的最快排序算法,其中每个组必须单独排序?因此,它必须连续多次快速排序少量可能重复的双精度值.值在[0..1]间隔内.我不关心空间复杂性或稳定性,只关心速度.
由于各种原因,我有一个自定义序列化,我将一些相当简单的对象转储到数据文件.可能有5-10个类,并且结果的对象图是非循环的并且非常简单(每个序列化对象具有1或2个对序列化的引用).例如:
class Foo
{
final private long id;
public Foo(long id, /* other stuff */) { ... }
}
class Bar
{
final private long id;
final private Foo foo;
public Bar(long id, Foo foo, /* other stuff */) { ... }
}
class Baz
{
final private long id;
final private List<Bar> barList;
public Baz(long id, List<Bar> barList, /* other stuff */) { ... }
}
Run Code Online (Sandbox Code Playgroud)
id字段仅用于序列化,因此当我序列化到文件时,我可以通过保存到目前为止序列化了哪些ID的记录来编写对象,然后为每个对象检查其子对象是否已被序列化并写入那些没有的,最后通过编写数据字段和与其子对象相对应的ID来编写对象本身.
令我困惑的是如何分配id.我想到了,似乎有三种情况可以分配ID:
我该如何妥善处理?我觉得我正在重新发明轮子,必须有一套完善的技术来处理所有情况.
澄清: …
我想将活动指示器颜色灰色/白色更改为黑色.是否可以将颜色更改为黑色?如果是,请指导我或提供一些示例代码.
我正在尝试实现自定义log4net logger/logmanager,以便我可以添加一个新级别.我还想让目标表的模式(我使用AdoNetAppender和SQL Server 2008)有一些可选字段; 例如,我添加的级别用于跟踪使用情况,其中一个字段需要是持续时间(告诉我们需要多长时间).但是,其他级别(INFO,DEBUG,FATAL等)对于Duration不具有任何值.所以我需要能够插入表中并不是所有具有值的字段 - 最好不必重新实现所有标准级别的日志记录,以便为不相关的字段传递空值.理想情况下,对于特定日志记录事件无法找到的属性值,log4net会自动传递NULL.
我的自定义记录器中的代码如下:
public void Usage(TimeSpan? duration, DateTime? startTime, DateTime? endTime, string message)
{
if (IsUsageEnabled)
{
LoggingEvent loggingEvent = new LoggingEvent(GetType(), Logger.Repository, Logger.Name, _currentUsageLevel,
message, null);
if (startTime.HasValue)
{
loggingEvent.Properties["StartTime"] = startTime.Value;
}
else
{
loggingEvent.Properties["StartTime"] = DBNull.Value;
}
if (endTime.HasValue)
{
loggingEvent.Properties["EndTime"] = endTime.Value;
}
else
{
loggingEvent.Properties["EndTime"] = DBNull.Value;
}
if (duration.HasValue)
{
loggingEvent.Properties["Duration"] = duration.Value.TotalMilliseconds;
}
else
{
loggingEvent.Properties["Duration"] = DBNull.Value;
}
Logger.Log(loggingEvent);
}
}
Run Code Online (Sandbox Code Playgroud)
(添加了对DBNull.Value的赋值,希望这可以帮助log4net在未传递值时传递空值,但我希望它们可以被删除).
appender配置如下:
<appender name="SQLAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize …Run Code Online (Sandbox Code Playgroud)