我在我的应用程序中使用油腔滑调,我看到有在油嘴滑舌更便利的包装对于C的remove,unlink和rmdir.但这些只能一次在单个文件或目录上工作.
据我所知,C标准和glib都不包含任何类型的递归目录遍历功能.我也没有看到任何特定方法一次删除整个目录树,如同rm -rf.
对于我正在做的事情,我并不担心任何复杂的问题,例如权限,符号链接备份树(无限递归),或任何会排除一个非常天真的实现...所以我不反对编写自己的它的功能.
但是,我很好奇这个功能是否已经存在于标准库gtk或glib(或其他一些容易重用的C库)的某个地方,我只是没有偶然发现它.谷歌搜索这个主题会产生很多错误的线索.
否则我的计划是使用这种算法:
dir_walk(char* path, void* callback(char*) {
if(is_dir(path) && has_entries(path)) {
entries = get_entries(path);
for(entry in intries) { dir_walk(entry, callback); }
}
else { callback(path) }
}
dir_walk("/home/user/trash", remove);
Run Code Online (Sandbox Code Playgroud)
显然,一旦遇到致命错误,我会构建一些错误处理等来中止进程.
在database.yml(rails生成的默认文件)中:
default: &default
adapter: sqlite3
pool: 5
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
test:
<<: *default
database: db/test.sqlite3
production:
<<: *default
database: db/production.sqlite3
Run Code Online (Sandbox Code Playgroud)
运行时rake about,我有这个错误:
Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded.
Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by
ActiveRecord).
Run Code Online (Sandbox Code Playgroud)
如果我添加pggem,则rake about提供此输出:
About your application's environment
Ruby version 2.1.0-p0 (x86_64-darwin13.0)
RubyGems version 2.2.2
Rack version 1.5
Rails …Run Code Online (Sandbox Code Playgroud) 我有一个Sinatra应用程序,我作为守护程序运行,使用Apache端口转发在端口80和端口7655之间进行调解.这在过去一直运行良好.今天不太好.我无法弄清楚为什么.
问题:sudo ruby my_process.rb退货:
/var/lib/gems/1.9.1/gems/eventmachine-1.0.0/lib/eventmachine.rb:526:in `start_tcp_server': no acceptor (port is in use or requires root privileges) (RuntimeError)
Run Code Online (Sandbox Code Playgroud)
尝试:更新所有系统包,更新所有宝石.没有帮助(来自eventmachine的更明确的错误消息除外).
当我跑步时,sudo lsof -i :7655我什么也得不回来.当我运行时,sudo ps aux我根本看不到任何 Ruby进程.鉴于错误消息的性质,我发现这是非常不规则的!
那么在找出端口不可用的原因时我有什么遗漏?
也:
尝试更换端口,没有.我想知道它是否与"localhost"有关?当我ping localhost时,我得到所有丢弃的数据包.这似乎不正常.
我目前正在使用内置的Web浏览器开发应用程序.为了让我们的客户更轻松,我们可以选择将他们网站的密码存储在他们的数据库中.目前,我们正在使用Javascript在加载页面后将信息提取到浏览器中.
这是我们在需要加载用户/密码的页面上运行的脚本....
JavaScript的:
var pwd="{0}"; //get password from vb.net app
var usr="{1}"; //get username from vb.net app
var inputs=document.getElementsByTagName("input"); //look for all inputs
for(var i=0;i<inputs.length;i++){{ //for each input on document
var input=inputs[i]; //look at whatever input
if(input.type=="password"&&(input.name.toLowerCase().indexOf("auth")==-1)){
{input.value=pwd}
}
if(input.type=="text"&&(input.name.toLowerCase().indexOf("login")!=-1||input.name.toLowerCase().indexOf("user")!=-1||input.name=="AgentAccount")){
{input.value=usr}
}
}};
undefined;
Run Code Online (Sandbox Code Playgroud)
我正在查看的其中一个页面是https://www.pagepluscellular.com/login/ - 我正在查看的表单代码是这个.
<div class="row">
<label for="username">Username:</label>
<input name="username" type="text" maxlength="75">
</div>
<div class="row">
<label for="password">Password:</label>
<input name="password" type="password" maxlength="50">
</div>
Run Code Online (Sandbox Code Playgroud)
再次,这很好.它填充密码/用户名字段就好了.
我的问题是为什么/如何,特别是与.indexOf("无论如何")有关.根据我的理解,当前脚本查找输入,检查它是否是密码字段或者您有什么,然后设置该字段...
但它实际上从未寻找过那些领域.例如,在上面列出的pagepluscellular网站上,输入名称是"用户名"和"密码",但在我们的脚本中,它实际上从未查找名称"用户名"或"密码"....所以它如何知道如何填写那些具体的输入?
我想要做的就是这个.我们找到了一个不适用的网站.即https://www.boostmobilesales.com/boost-sales-portal/faces/login.jsp.此页面上的表单代码是......
<input id="loginform:username" type="text" name="loginform:username" "class="outputtext" size="20">
<input id="loginform:password" …Run Code Online (Sandbox Code Playgroud) 我在我正在处理的apache模块中有这个代码,它是使用ap_hook_child_init()注册的:
static class_name *mc;
static void child_init(apr_pool_t *pool, server_rec *s)
{
ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, "this pointer should be null: %pp", mc);
mc = mc_alloc();
ap_log_error(APLOG_MARK, APLOG_INFO, 0, s, "this pointer should not be null: %pp", mc);
}
Run Code Online (Sandbox Code Playgroud)
问题:我没有看到这些日志消息!
我确信正在调用此函数并且调用mc_alloc()正在工作,因为当我从模块的其他部分(如请求处理程序)中进行日志记录时,我会看到日志消息并获得指针的有效结果.这也告诉我日志记录正在运行.
这是我的代码错了还是我的期望?可以在ap_hook_child_init回调期间不发出日志消息吗?如果没有,我怎么能记录孩子的初始化?
我有一个"命令"类:
public static class MyCommands
{
private static ICommand exitCommand = new RoutedCommand();
public static ICommand ExitCommand { get { return exitCommand; } }
}
Run Code Online (Sandbox Code Playgroud)
MainWindow.xaml.cs中的代码隐藏:
private void BindCommands()
{
this.CommandBindings.Add(new CommandBinding(MyCommands.ExitCommand, this.Exit));
}
private void Exit(object sender, ExecutedRoutedEventArgs e)
{
Application.Current.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)
实现菜单栏的用户控件中的一些XAML:
<MenuItem Header="_Exit"
Command="{x:Static local:MyCommands.ExitCommand}"
/>
Run Code Online (Sandbox Code Playgroud)
代码有效.我喜欢所涉及的一般模式,我想继续使用它.
但是,我也在努力追求其他目标,例如进行测试驱动开发,并通过我的单元和集成测试实现100%的覆盖率.我还希望100%符合StyleCop和FxCop警告.而且我被抓到了这里.
我的MainWindow.Exit()方法是私有的,正如FxCop(Microsoft.Security:CA2109)所推荐的那样,但这意味着我不能直接从测试中调用它.我想我可以把它公开并压制FxCop消息.或者我可以使用访问者.但是我反对直接针对私有方法编写测试,特别是在这种情况下,因为所有这些都是测试方法而不是命令绑定本身.
我觉得必须有其他方法从我的测试代码调用命令,以便我可以验证命令是否按预期工作(除了手动测试).有什么建议?
我有以下使用 sqlite3 的 C 代码:
if(SQLITE_OK == sqlite3_initialize()) {
self->db_open_result = sqlite3_open(self->db_uri, &(self->db));
} else {
self->db_open_result = SQLITE_ERROR;
}
Run Code Online (Sandbox Code Playgroud)
显然,我非常有信心代码是正确的并且会按预期运行。但是,我正在使用 gcov/lcov 测量单元测试的代码覆盖率,我很好奇在这种情况下如何使覆盖率达到 100%。正常情况下sqlite3_initialize()永远不会失败,因此该else子句永远不会执行。
有没有一种方法可以导致此失败而不完全造成破坏?
这可能很疯狂.
我想把依赖注入的想法变为极端.我已将所有与System.IO相关的行为隔离到一个类中,这样我就可以在其他类中模拟该类,从而减轻了我对更大的单元测试套件担心实际文件系统的负担.
但是我最终得到的File IO类只能通过集成测试进行测试,当然,当我真正想要做的就是确保我的FileIO类调用时,它会引入我真正不想处理的复杂性.正确的System.IO东西.我不需要集成测试System.IO.我的FileIO类不仅仅是简单地包装System.IO函数,它不时地包含一些逻辑(也许这就是问题?).
所以我想要的是能够测试我的File IO类,以确保它通过模拟System.IO类本身来进行正确的系统调用.理想情况下,这就像拥有像这样的构造函数一样简单:
public FileIO(
System.IO.Directory directory,
System.IO.File file,
System.IO.FileStream fileStream
)
{
this.Directory = directory;
this.File = file;
this.FileStream = fileStream;
}
Run Code Online (Sandbox Code Playgroud)
然后调用以下方法:
public GetFilesInFolder(string folderPath)
{
return this.Directory.GetFiles(folderPath)
}
Run Code Online (Sandbox Code Playgroud)
但是由于System.IO类是静态类,因此不会出现这种情况.据我所知,他们既不能以这种方式实例化,也不能用于嘲笑的目的.
鉴于强类型ActionLink不可行(在Asp.Net MVC 2中强类型ActionLink?),我们不能做类似的事情:
<%: Html.ActionLink<HomeController>(x => x.Index(), "Home") %>
Run Code Online (Sandbox Code Playgroud)
我正在考虑使用任何类static readonly string或资源文件作为解决方法.这将获得一定程度的编译时间检查,允许重命名而不使用查找/替换,甚至(在某些疯狂的世界中)允许本地化.在缺点方面,它需要有关可用控制器和操作的重复信息.
<%: Html.ActionLink(Controllers.Home, HomeActions.Index, HomeActions.IndexTitle) %>
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来处理这个改进使用魔术字符串的不优雅默认值?
c ×3
apache ×2
c# ×2
asp.net-mvc ×1
eventmachine ×1
glib ×1
gtk ×1
html ×1
javascript ×1
logging ×1
mocking ×1
rake ×1
ruby ×1
sinatra ×1
sqlite ×1
tdd ×1
testing ×1
unit-testing ×1
wpf ×1