小编mli*_*bby的帖子

如何在C中遍历目录

我在我的应用程序中使用油腔滑调,我看到有在油嘴滑舌更便利的包装对于C的remove,unlinkrmdir.但这些只能一次在单个文件或目录上工作.

据我所知,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)

显然,一旦遇到致命错误,我会构建一些错误处理等来中止进程.

c gtk glib directory-walk

7
推荐指数
3
解决办法
4437
查看次数

关于数据库适配器与database.yml不一致的问题

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)

rake ruby-on-rails

7
推荐指数
1
解决办法
3717
查看次数

无法启动sinatra进程 - eventmachine"no acceptor"

我有一个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时,我得到所有丢弃的数据包.这似乎不正常.

ruby apache sinatra eventmachine

6
推荐指数
1
解决办法
2572
查看次数

使用Javascript自动填充网页用户名密码

我目前正在使用内置的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)

html javascript

6
推荐指数
1
解决办法
7183
查看次数

ap_log_error没有登录我的apache模块

我在我正在处理的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回调期间不发出日志消息吗?如果没有,我怎么能记录孩子的初始化?

c apache logging

5
推荐指数
1
解决办法
4839
查看次数

如何为WPF命令绑定编写测试?

我有一个"命令"类:

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消息.或者我可以使用访问者.但是我反对直接针对私有方法编写测试,特别是在这种情况下,因为所有这些都是测试方法而不是命令绑定本身.

我觉得必须有其他方法从我的测试代码调用命令,以便我可以验证命令是否按预期工作(除了手动测试).有什么建议?

c# testing wpf commandbinding

2
推荐指数
1
解决办法
3263
查看次数

如何导致sqlite3_initialize失败

我有以下使用 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子句永远不会执行。

有没有一种方法可以导致此失败而不完全造成破坏?

c sqlite unit-testing

2
推荐指数
1
解决办法
820
查看次数

将System类作为构造函数参数传递

这可能很疯狂.

我想把依赖注入的想法变为极端.我已将所有与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类是静态类,因此不会出现这种情况.据我所知,他们既不能以这种方式实例化,也不能用于嘲笑的目的.

c# tdd mocking

1
推荐指数
1
解决办法
227
查看次数

ASP.NET MVC中强类型ActionLink的变通方法

鉴于强类型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)

有没有其他方法来处理这个改进使用魔术字符串的不优雅默认值?

asp.net-mvc

1
推荐指数
1
解决办法
1066
查看次数