如果文件被创建,复制或移动到我正在观看的目录中,我正在尝试收到通知.我只希望收到有关文件的通知,而不是目录.
这是我目前的一些代码:
_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我没有解释得足够好......我有WatchedDirectory和Directory1.Directory1包含Hello.txt.如果我将Directory1移动到WatchedDirectory,我希望收到Hello.txt的通知.
编辑:我应该注意我的操作系统是Windows 8.而且我确实收到了复制/粘贴事件的通知,但没有移动事件(拖放到文件夹中).
我正在努力解决我的设计困境.
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.
在这段代码中:
const char * str = "hello world";
如果我理解正确,指针是4或8个字节,我想这将在堆栈上分配.但分配和存储"hello world"的内存在哪里?
或者究竟str指出了什么?
在Visual Studio Express 2012页面上有两个选项:Express for Windows 8和Express for Windows Desktop
这两者有什么不同?
我在调用时使用这些窗口样式CreateWindow
WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX
禁用最大化框,但有什么办法可以完全删除它吗?
我应该用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)
哪个被认为是更好地使用异常处理/如果更好的做法?
可能重复:
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)
问题是,在调整窗口大小后调用代码.使窗口调整大小然后闪烁回来.
我想这样做当用户试图拖动窗口的高度时它什么都不做.
根据MSDN的列表,GDI和GDI +都是遗产.因此,在使用Windows API编写应用程序时,您应该使用什么来渲染2D图形?
Direct2D,WIC,DirectComposition(这对我来说是新手),GDI +,GDI?
注意:不是2d游戏 - 只是2d图像.
我已使用以下代码禁用了行输入:
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) 我将接收用户名和密码并将其存储在结构中。
我该如何防止某人查看我的进程的内存并查看用户的用户名/密码?
我的第一个想法是对内存中的用户名和密码进行加密,并在完成后将其归零。但随后我必须将密钥存储在内存中的某个位置,以便可以检索。
好吧,这将使恢复凭证变得非常困难,但这仍然是可能的。
还有比这更安全的方法吗?