小编Jos*_*osh的帖子

FileSystemWatcher文件位于子目录中

如果文件被创建,复制或移动到我正在观看的目录中,我正在尝试收到通知.我只希望收到有关文件的通知,而不是目录.

这是我目前的一些代码:

_watcher.NotifyFilter = NotifyFilters.FileName;
_watcher.Created += new FileSystemEventHandler(file_created);
_watcher.Changed += new FileSystemEventHandler(file_created);
_watcher.Renamed += new RenamedEventHandler(file_created);
_watcher.IncludeSubdirectories = true;
_watcher.EnableRaisingEvents = true;
Run Code Online (Sandbox Code Playgroud)

问题是,如果我移动一个包含文件的目录,我就不会收到该文件的任何事件.

如何通知我所有添加的文件(无论如何)到监视目录或它的子目录?

Incase我没有解释得足够好......我有WatchedDirectoryDirectory1.Directory1包含Hello.txt.如果我将Directory1移动到WatchedDirectory,我希望收到Hello.txt的通知.

编辑:我应该注意我的操作系统是Windows 8.而且我确实收到了复制/粘贴事件的通知,但没有移动事件(拖放到文件夹中).

c# filesystemwatcher

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

取消运行长操作的线程

我正在努力解决我的设计困境.

ClassWithLongOperation
{
    Run()
    {
        RecrusiveOperation();
    }

    RecrusiveOperation()
    {
        /* RECURSION */
    }
}

MyThread
{
    ClassWithLongOperation Op1(10);
    Op1.Run();  // Takes several minutes.

    ClassWithLongOperation Op2(20);
    Op2.Run();

    SomeOtherClassWithLongOperation Op3;
    Op3.Run();

    // Do some other stuff
}
Run Code Online (Sandbox Code Playgroud)

GUI启动MyThread,运行时间为5-6分钟.我希望能够在我的GUI上有一个大胖的取消按钮,因此用户可以取消操作.

我可以创建一个全局布尔变量bCancelled,并检查它是否已在RecursiveOperation中设置,但我想成为一个优秀的C++和OO程序员并避免全局变量.特别是如果它们必须分布在多个文件中.

那么我(按照良好的设计)如何安全地取消MyThread?我可以在设置中更改哪些内容以允许此操作?

我也_beginthreadex用来启动线程,但是如果能够提供更简单的解决方案,我可以使用boost.

c++ oop multithreading design-patterns

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

用const char指针分配的内存在哪里?

可能重复:
是否在静态内存中创建了c ++中的字符串文字?
C++字符串文字数据类型存储

在这段代码中:

const char * str = "hello world";

如果我理解正确,指针是4或8个字节,我想这将在堆栈上分配.但分配和存储"hello world"的内存在哪里?
或者究竟str指出了什么?

c c++ memory

6
推荐指数
3
解决办法
6189
查看次数

Express for Windows 8 vs Express for Windows桌面

在Visual Studio Express 2012页面上有两个选项:Express for Windows 8Express for Windows Desktop

这两者有什么不同?

visual-studio-2012

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

C++ Windows删除最大化框

我在调用时使用这些窗口样式CreateWindow
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
禁用最大化框,但有什么办法可以完全删除它吗?

c c++ windows winapi maximize

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

在C++中正确使用异常

我应该用C++ std::runtime_error来表示发生了某种错误,或者我应该创建继承的自定义异常,std::runtime_error以便我可以更好地处理它们.

例如,如果我以某种方式从用户那里得到了输入,那会更好:

if (inputInvalid)
{
    throw std::runtime_error("Invalid input!");
}
Run Code Online (Sandbox Code Playgroud)

与...

class invalid_input
    : public std::runtime_error /* or should I inherit from std::exception? */
{
public:
    invalid_input()
        : std::runtime_error("Invalid input!")
    {
    };
};

-------------------------------------------------------

if (inputInvalid)
{
    throw invalid_input();
}
Run Code Online (Sandbox Code Playgroud)

哪个被认为是更好地使用异常处理/如果更好的做法?

c++ coding-style exception-handling runtime-error exception

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

JDialog固定高度

可能重复:
JDialog允许用户仅更改对话框的宽度

我有一个JDialog,我希望宽度可以调整,但高度不是.

这是我目前的代码:

addComponentListener(new ComponentAdapter() {
    @Override
    public void componentResized(ComponentEvent e) {
        setLocation(getLocation().x, getLocation().y + (getHeight() - staticHeight));
        setSize(new Dimension(getWidth(), staticHeight));
        super.componentResized(e);
    }
});
Run Code Online (Sandbox Code Playgroud)

问题是,在调整窗口大小后调用代码.使窗口调整大小然后闪烁回来.

我想这样做当用户试图拖动窗口的高度时它什么都不做.

java swing jdialog

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

Microsoft推荐使用什么原生API来渲染2D图形?

根据MSDN的列表,GDI和GDI +都是遗产.因此,在使用Windows API编写应用程序时,您应该使用什么来渲染2D图形?

Direct2D,WIC,DirectComposition(这对我来说是新手),GDI +,GDI?

注意:不是2d游戏 - 只是2d图像.

c++ windows winapi image

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

为什么在循环中调用ReadConsole会破坏堆栈?

我已使用以下代码禁用了行输入:

DWORD dwConsoleMode;
GetConsoleMode(hStdIn, &dwConsoleMode);
dwConsoleMode ^= ENABLE_LINE_INPUT;
SetConsoleMode(hStdIn, dwConsoleMode);
Run Code Online (Sandbox Code Playgroud)

然后我在循环中调用ReadConsole ...在循环中:

wchar_t cBuf;

while (1) {
    /* Display Options */

    do {
        ReadConsole(hStdIn, &cBuf, 1, &dwNumRead, NULL);
    } while (!iswdigit(cBuf));

    putwchar(cBuf);

    if (cBuf == L'0') break;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行程序并立即按0,它就会干净利落地存在.
但是,如果我按下一串键,然后按0,当程序存在时,它会崩溃:

运行时检查失败#2 - 变量'cBuf'周围的堆栈已损坏.

为什么这会导致堆栈损坏?代码很简单,所以我无法弄清楚出了什么问题.

我可以通过以下方式重现问题的小程序:

#include <windows.h>
#include <stdio.h>

int wmain(int argc, wchar_t *argv[])
{
    DWORD dwNumRead;
    wchar_t cBuf;

    HANDLE hStdIn = GetStdHandle(STD_INPUT_HANDLE);

    DWORD dwConsoleMode;
    GetConsoleMode(hStdIn, &dwConsoleMode);
    dwConsoleMode ^= ENABLE_LINE_INPUT;
    SetConsoleMode(hStdIn, dwConsoleMode);

    while (true)
    {
        wprintf(L"\nEnter option: ");

        do { …
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi stack-corruption

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

保护内存中的凭证

我将接收用户名和密码并将其存储在结构中。

我该如何防止某人查看我的进程的内存并查看用户的用户名/密码?

我的第一个想法是对内存中的用户名和密码进行加密,并在完成后将其归零。但随后我必须将密钥存储在内存中的某个位置,以便可以检索。

好吧,这将使恢复凭证变得非常困难,但这仍然是可能的。

还有比这更安全的方法吗?

c windows security

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