小编Rem*_*eau的帖子

如何在Windows的Linux子系统(WSL)下通过bash从R执行linux命令?

Windows 10上的WSL允许通过bash.exe执行Linux命令和命令行工具.非常有用的是,可以从Windows命令行(cmd.exe)调用Linux工具/命令,方法是将其作为参数传递给bash.exe,如下所示:

bash.exe -c <linux command>
Run Code Online (Sandbox Code Playgroud)

这非常有用,因为它应该允许基于Windows的脚本无缝地组合Windows和Linux工具.

不幸的是,我无法从R脚本调用Linux命令(见下文).

0)系统

安装了Win10 x64 +周年纪念更新+ WSL

1)调用Linux命令的比较情况

以下一切都适合我; 这里显示的只是一个示例调用ls.

windows delphi r windows-subsystem-for-linux

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

如何在编译时测试接口是否存在?

Delphi 2010中不存在单元中的IDeveloperConsoleMessageReceiver接口MSHTML.pas,但(可能)存在于更新版本中,因为它是最近的功能.

我想手动声明此接口,但仅限于它尚不存在.

如何测试是否声明了此接口?

像"假"代码:

{$IFNDEF "IDeveloperConsoleMessageReceiver"}
type
  IDeveloperConsoleMessageReceiver = interface ...
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

delphi

9
推荐指数
2
解决办法
320
查看次数

C ++内存对齐-我们应该注意吗?

考虑在具有以下类型对齐方式的x64位Windows操作系统上工作:

C ++在我的PC上建立类型对齐

据我了解,做这样的事情非常不好:

struct X_chaotic
{
    bool flag1;
    double d1;
    bool flag2;
    double d2;
    bool flag3;
    double d3;
    //... and so on ...
};
Run Code Online (Sandbox Code Playgroud)

根据C ++对齐,缓存行和最佳实践 以及数据结构对齐,编写此代码应该更好/更快并且更紧凑:

struct X_alignOrder
{
    double d1;
    double d2;
    double d3;
    //... all other doubles ...
    bool flag1;
    bool flag2;
    bool flag3;
    //... all other bools ...
};
Run Code Online (Sandbox Code Playgroud)

成员以比对大小的顺序声明,从最高比对开始。

可以肯定地说按对齐大小对数据成员的声明进行排序是个好主意吗?您会说这是最佳做法吗?还是没有区别?

(由于C ++标准,我听说编译器无法重新排列定义的顺序,这甚至适用于在类的访问说明符块中声明的所有数据成员)

因为我从没读过这本书,所以无论是在Scott Meyers的书还是Bjarne Stroustrup的书中,我都不知道应该为我的日常工作重新排列数据声明的顺序。

c++ memory-alignment

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

使用ReadDirectoryChangesW是否需要管理员权限?

MSDN表示使用ReadDirectoryChangesW意味着调用进程具有备份和还原权限.

这是否意味着只有在管理员帐户下启动的流程才能正常运行?

我尝试了以下代码,它在作为受限用户运行时无法启用所需的权限.

void enablePrivileges() 
{       
    enablePrivilege(SE_BACKUP_NAME);
    enablePrivilege(SE_RESTORE_NAME);
}

void enablePrivilege(LPCTSTR name) 
{       
    HANDLE hToken;    
    DWORD status;
    if (::OpenProcessToken(::GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))  
    {        
        TOKEN_PRIVILEGES tp = { 1 };   
        if( ::LookupPrivilegeValue(NULL, name,  &tp.Privileges[0].Luid) )
        {
            tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
            BOOL result = ::AdjustTokenPrivileges(hToken, FALSE, &tp, 0, NULL, NULL);
            verify (result != FALSE);
            status = ::GetLastError();      
        }
        ::CloseHandle(hToken); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?是否有从非管理员用户帐户使用ReadDirectoryChangesW的解决方法?似乎.NET的FileSystemWatcher可以做到这一点.谢谢!

更新:这是该类的完整代码:

  class DirectoryChangesWatcher
  {
  public:
   DirectoryChangesWatcher(wstring directory)
   {
    enablePrivileges();

    hDir = ::CreateFile(directory.c_str(), 
     FILE_LIST_DIRECTORY | FILE_FLAG_OVERLAPPED, 
     FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 
     FILE_FLAG_BACKUP_SEMANTICS, …
Run Code Online (Sandbox Code Playgroud)

c++ security winapi notifications filesystemwatcher

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

TVirtualStringTree - 重置非可视节点和内存消耗

我有一个应用程序,从二进制日志文件加载记录,并在虚拟TListView中显示它们.文件中可能有数百万条记录,用户可以过滤显示,因此我不会一次加载内存中的所有记录,并且ListView项目索引不是一对一的关系.文件记录偏移(例如,列表项1可以是文件记录100).我使用ListView的OnDataHint事件来加载ListView实际感兴趣的项目的记录.当用户滚动时,OnDataHint指定的范围发生变化,允许我释放不在新范围内的记录,并分配新记录如所须.

这样工作正常,速度可以忍受,并且内存占用非常低.

我目前正在评估TVirtualStringTree作为TListView的替代品,主要是因为我想添加扩展/折叠跨越多行的记录的能力(我可以通过动态递增/递减项目计数来使用TListView来捏造它,但这不是像使用真正的树一样直接).

在大多数情况下,我已经能够移植TListView逻辑并让一切工作正常.我注意到TVirtualStringTree的虚拟范例有很大的不同.它没有与TListView相同的OnDataHint功能(我可以使用OnScroll事件伪造它,这允许我的内存缓冲逻辑继续工作),我可以使用OnInitializeNode事件将节点与分配的记录相关联.

但是,一旦树节点初始化,它就会看到它在树的生命周期内保持初始化状态.这对我不好.当用户滚动并从内存中删除记录时,我需要重置那些非可视节点,而不是完全从树中删除它们,或者丢失它们的展开/折叠状态.当用户将它们滚动回视图时,我可以重新分配记录并重新初始化节点.基本上,就虚拟化而言,我希望尽可能使TVirtualStringTree像TListView一样.

我已经看到TVirtualStringTree有一个ResetNode()方法,但每次尝试使用它时都会遇到各种错误.我一定是错了.我还想过将每个节点内的数据指针存储到我的记录缓冲区中,然后分配并释放内存,相应地更新这些指针.最终效果也不是很好.

更糟糕的是,我最大的测试日志文件中有大约500万条记录.如果我一次初始化具有那么多节点的TVirtualStringTree(当日志显示未经过滤时),那么树的内部开销就会占用高达260MB的内存(还没有分配任何记录).而使用TListView,加载相同的日志文件及其背后的所有内存逻辑,我可以使用几个MB.

有任何想法吗?

delphi vcl c++builder virtualtreeview

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

如何为 Windows 10 注册自定义协议?

我想myscheme://foo通过我的应用程序像在任何浏览器中一样处理查询myscheme.exe

据我了解,解决方案将取决于所使用操作系统的版本。对于旧操作系统(直到 Windows 7),只需将记录保存在注册表中:

HKEY_CLASSES_ROOT
  myscheme
  (Default) = "URL:Myscheme Protocol"
  URL Protocol = ""
  DefaultIcon
     (Default) = "myscheme.exe,1"
  shell
     open
        command
           (Default) = "C:\Program Files\Myscheme\myscheme.exe" "%1"
Run Code Online (Sandbox Code Playgroud)

不幸的是,将应用程序注册到 URI 方案声明这种方式已被弃用。我不应该再使用这个 API。页面上的推荐版本microsoft-edge(它不包含有关它的信息)!!!

于是,我开始研究它windows 8。我遇到了文件类型和 URI 关联模型,它说在Windows 8应用程序中不再能够以编程方式将自己设置为文件类型或 URI 的默认处理程序。据我所知,新架构使用通知系统,用户通过特殊提示控制默认应用程序。但是默认程序说它对 Windows 10 不再有效(探索参考已经死了!)。

那么,如何在 Windows 10 中正确处理自定义协议呢?不幸的是,Windows 的文档很糟糕。那么不同版本的操作系统呢?我应该对不同的版本使用不同的技术吗?

PS请不要将此问题标记为重复。其他问题,例如如何在 Windows 中注册自定义 URL 协议?,如何创建自己的 URL 协议?(例如:so://...)提出已弃用的解决方案。

对不起,我的英语不好。

windows winapi protocols url-scheme

8
推荐指数
0
解决办法
3554
查看次数

从文件读取UTF-16格式的一行

我有一些从脚本生成的文件,这些文件提供了有关各种计算机的信息。txt文件采用UTF-8,但是只有一行采用UTF-16格式。我应该如何从文件中读取这一行?

PS我正在尝试编写一个程序来解析所有这些文件,并将它们重新编译为一个集合的.csv文件。

我尝试使用bufferedReader和读取文件Scanner,但是这一行是我遇到的唯一麻烦。我在网上找到的大多数用于读取UTF-16的代码都用于整个文件,而在UTF-16中并不完全。

//在记事本中打开该行时的外观。

序列号5 CG 8 XXXXXX

//在Notepad ++中打开该行时的外观,每个字符之间都有“ nul”值。

序列号     

 5 CG 8 XXXXXX

我的代码可以提取字符串的一部分,但是它的格式是多行,而Java无法识别每个字母或数字之间的字符。

java utf-8

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

*(&amp;arr + 1) - arr 如何给出数组 arr 元素的长度?

#include <iostream>
using namespace std;

int main() { 
   int  arr[5] = {5, 8, 1, 3, 6};
   int len = *(&arr + 1) - arr;
   cout << "The length of the array is: " << len;
   return 0;
} 
Run Code Online (Sandbox Code Playgroud)

对于上面的代码,我不太明白这两段代码是做什么的:

*(&arr + 1) 
Run Code Online (Sandbox Code Playgroud)

*(&arr)
&arr
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?因为当我运行以下两个代码时,我得到以下相同的输出:

&arr (我认为这指向arr的第一个元素的地址)

*(&arr)那么我不太明白这是做什么的,符号*&arr(即这里的地址)有什么作用?,因为当我运行它们时,两个输出是相同的

最后,当一个整数说 1 被这里的代码添加到地址时,到底发生了什么: &arr + 1

c++ arrays

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

为什么复制捕获 lambda 在 c++20 中不是默认的 DefaultConstructible

C++20 引入了DefaultConstructiblelambda。然而,cppreference.com 声明这仅适用于无状态 lambda:

如果未指定捕获,则闭包类型具有默认的默认构造函数。否则,它没有默认构造函数(这包括存在捕获默认值的情况,即使它实际上没有捕获任何内容)。

为什么这不扩展到捕获事物的 lambda DefaultConstructible?例如,为什么不能[p{std::make_unique<int>(0)}](){ return p.get(); }DefaultConstructible被俘者p会在哪里nullptr

编辑:对于那些问我们为什么想要这个的人来说,这种行为看起来很自然,因为在调用要求函子可默认构造的标准算法时被迫编写这样的东西:

struct S{
  S() = default;
  int* operator()() const { return p.get(); }
  std::unique_ptr<int> p;
};
Run Code Online (Sandbox Code Playgroud)

所以,我们可以传入S{std::make_unique<int>(0)},它会做同样的事情。

似乎能够编写[p{std::make_unique<int>(0)}](){ return p.get(); }而不是创建一个执行相同操作的结构要好得多。

c++ c++20

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

std::decay 和 std::remove_cvref 之间的区别?

C++20之后会std::remove_cvref取代吗?std::decay

这个链接,我无法理解这意味着什么:

C++20 将具有一个新特征std::remove_cvref,不会对std::decay数组产生不良影响

有何不良影响std::decay

请举例和解释!

c++ metaprogramming

8
推荐指数
2
解决办法
843
查看次数