ZipArchive是ZipArchiveEntries的集合,添加/删除"条目"非常有效.但似乎没有目录/嵌套"档案"的概念.理论上,该类与文件系统分离,因为您可以在内存流中完全创建存档.但是,如果要在归档中添加目录结构,则必须在条目名称前添加路径前缀.
问题:如何扩展ZipArchive以创建更好的界面来创建和管理目录?
例如,将文件添加到目录的当前方法是使用目录路径创建条目:
var entry = _archive.CreateEntry("directory/entryname");
Run Code Online (Sandbox Code Playgroud)
而沿着这些方面的东西对我来说似乎更好:
var directory = _archive.CreateDirectoryEntry("directory");
var entry = _directory.CreateEntry("entryname");
Run Code Online (Sandbox Code Playgroud) 我有一个异步生成器:
async function* foo() {
yield "wait...";
await new Promise(r=>setTimeout(r, 900));
yield new Promise(r=>setTimeout(()=>r("okay!"), 100));
}
async function main() {
for await (let item of foo()) {
let result = await item;
console.log(result);
}
}
main();
Run Code Online (Sandbox Code Playgroud)
但是使用typescript 2.3,这给了我错误:
错误TS2318:找不到全局类型'AsyncIterableIterator'.example.ts(10,26):
错误TS2504:类型必须具有返回异步迭代器的'Symbol.asyncIterator'方法.
如何修复此错误以及如何运行异步生成器?
我有一个非常奇怪的问题,等待一个已经通过resolve事件 - 发射器回调的Promise 只是退出进程而没有错误.
const {EventEmitter} = require('events');
async function main() {
console.log("entry");
let ev = new EventEmitter();
let task = new Promise(resolve=>{
ev.once("next", function(){resolve()}); console.log("added listener");
});
await task;
console.log("exit");
}
main()
.then(()=>console.log("exit"))
.catch(console.log);
process.on("uncaughtException", (e)=>console.log(e));
Run Code Online (Sandbox Code Playgroud)
我期待这个过程在我运行时暂停,因为显然"next"当前从未发出过.但我得到的输出是:
条目
添加了听众
然后nodejs进程正常终止.
我认为这是什么做的垃圾收集器,但ev并task显然还是在范围main.所以我真的不知道为什么这个过程完全没有错误地退出.
很显然,我会最终发出的事件,但我已经简化我的代码上面的重现.我在node v8.7.0.我的代码有问题还是这个节点错误?
我很难找到一个在ASP.NET Core 1.0中设置WebSockets的例子; 它们似乎都适用于以前版本的ASP.NET,有些依赖于context(对我来说)似乎不存在的属性.
主文档也只有一个占位符.http://docs.asp.net/en/latest/
例如:
app.UseWebSockets();
app.Use(async (context, next) =>
{
if (context.IsWebSocketRequest)
{
WebSocket webSocket = await context.AcceptWebSocketAsync();
await EchoWebSocket(webSocket);
}
else
{
await next();
}
});
Run Code Online (Sandbox Code Playgroud)
不起作用,因为IsWebSocketRequest现在不存在.ASP.NET Core 1.0中的正确方法是什么?
我想在用户开始在搜索栏上编辑时隐藏我的页面的导航栏,我还想显示一个取消按钮.
已完成,但是当我打开UISearchBar感谢全部时,我的取消按钮无法访问.
- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
self.navigationController.navigationBar.hidden=TRUE;
CGRect r=self.view.frame;
r.origin.y=-44;
r.size.height+=44;
self.view.frame=r;
searchBar.showsCancelButton=TRUE;
}
Run Code Online (Sandbox Code Playgroud) WPF如何在高度易变的应用程序中优化布局/渲染周期?
例如,假设我快速连续两次使自定义控件无效,它会渲染两次吗?当数据/属性更新速率比主渲染速率快时,是否存在性能问题?
按照这个问题Foreach循环处理控件跳过迭代它告诉我,迭代是允许通过更改集合:
例如,以下内容:
List<Control> items = new List<Control>
{
new TextBox {Text = "A", Top = 10},
new TextBox {Text = "B", Top = 20},
new TextBox {Text = "C", Top = 30},
new TextBox {Text = "D", Top = 40},
};
foreach (var item in items)
{
items.Remove(item);
}
Run Code Online (Sandbox Code Playgroud)
投
InvalidOperationException:Collection已被修改; 枚举操作可能无法执行.
但是,在.Net表单中,您可以执行以下操作:
this.Controls.Add(new TextBox {Text = "A", Top = 10});
this.Controls.Add(new TextBox {Text = "B", Top = 30});
this.Controls.Add(new TextBox {Text = "C", Top = 50});
this.Controls.Add(new …Run Code Online (Sandbox Code Playgroud) 从GitLab 7.6或其附近开始,有一个新选项可以直接从GitLab项目中使用TeamCity.在设置中有以下消息:
Teamcity中的构建配置必须使用构建格式编号%build.vcs.number%,您还需要配置对所有分支的监视,以便构建合并请求,该设置位于vsc根高级设置中.
我不确定这是怎么回事.可以说我有一个存储库Foo.
我已经在TeamCity上设置了一个构建来使用分支规范来监听Foo: +:refs/pull/*/merge
然后我在gitlab中将Foo分叉为FooFork,进行更改,然后请求合并FooFork - > Foo.
但没有任何事情可以测试这个合并,这是我期待GitLab做的事情.如果我接受合并而不是构建服务器跳转到行动(立即)并构建两次(master和/ref/master).
我还将构建配置设置为完全使用:%build.vcs.number%作为规定的构建号,但gitlab似乎没有给我任何有关构建结果的信息.
所以我真的有点困惑这个GitLab究竟是什么 - > TeamCity集成应该做什么以及我是否做错了.
我目前正在运行GitLab 7.9和TeamCity 8.1.4
更新:
似乎在版本8之前不支持此用例 - https://github.com/gitlabhq/gitlabhq/issues/7240
我需要Guid从一个查询中获取我的ID(类型):
var firstQuery =
from rooms in myEntityContext.Room.Where(t => t.fldClosed == 0)
join conts in myEntityContext.Cont on rooms.ID equals conts.ItemID
select new
{
ContPrice = conts.Price,
RoomPrice = rooms.Price
IDs = rooms.ID
};
foreach (var t in firstQuery)
{
t.RoomPrice = t.ContPrice;
}
Run Code Online (Sandbox Code Playgroud)
然后我对它做一些操作(更新价格),最后我使用ID进行第二次查询.第二个查询不包含这些ID.我用这种方式实现了这个问题:
var myIDs = firstQuery.Select(cr => cr.IDs).ToList();
Run Code Online (Sandbox Code Playgroud)
我的第二个问题是:
var secondQuery =
from rooms in myEntityContext.Room.Where(t => t.fldClosed == 0)
where !myIDs.Contains(rooms.fldID)
join conts in myEntityContext.Cont on rooms.ID equals conts.ItemID
select new
{
RoomPrice = conts.fldPrice, …Run Code Online (Sandbox Code Playgroud) c# ×4
.net ×3
.net-4.5 ×1
angular ×1
asp.net-core ×1
async-await ×1
aurelia ×1
foreach ×1
gitlab ×1
html ×1
html5 ×1
iphone ×1
javascript ×1
linq ×1
node.js ×1
performance ×1
promise ×1
teamcity ×1
typescript ×1
uisearchbar ×1
websocket ×1
winforms ×1
wpf ×1
zip ×1