C++ 临时档案及;Windows上的文件夹
通过多次加载DLL来模拟多线程(它就是为此而设计的)。由于C++ 临时档案及;Windows上的文件夹,c++,windows,winapi,temp,C++,Windows,Winapi,Temp,通过多次加载DLL来模拟多线程(它就是为此而设计的)。由于LoadLibrary()实际上不允许它,DLL通过GetTempPath()和GetTempFileName()将自己复制到一个临时文件中 这是一个小文件,在线程被破坏时,它会释放库并删除临时文件。现在的问题是线程的数量是可配置的(疯子可以选择50、100或更多),这基本上暴露了运行不稳定、崩溃和不执行通常的“删除临时文件”例程的风险 我把那些临时文件留在那里死掉可以吗?操作系统通常会自己清理吗?还是应该编写一个自动清理例程?如果是,我
LoadLibrary()
实际上不允许它,DLL通过GetTempPath()
和GetTempFileName()
将自己复制到一个临时文件中
这是一个小文件,在线程被破坏时,它会释放库并删除临时文件。现在的问题是线程的数量是可配置的(疯子可以选择50、100或更多),这基本上暴露了运行不稳定、崩溃和不执行通常的“删除临时文件”例程的风险
我把那些临时文件留在那里死掉可以吗?操作系统通常会自己清理吗?还是应该编写一个自动清理例程?如果是,我如何保存另一个临时文件以保存包含这些文件的列表,而不受UAC限制或其他限制
有什么想法吗?你的LoadLibrary/多线程讨论让我感到困惑,但没关系 Windows上的临时文件通常不会被创建它们的进程以外的任何程序删除。如果用户运行“磁盘清理”util或类似工具,他可能会自动删除这些文件。我不认为这种情况经常发生 最佳方法。让您的应用程序在temp文件夹中创建一个子目录(可能还有每个流程实例的子文件夹)。当应用程序退出时,它会通过DeleteFile清理自己的一组临时文件。在应用程序重新启动时,它可以有一些逻辑来清理由于前一个进程崩溃而仍然存在的文件夹和文件 您还可以查看如何在CreateFile上使用FILE_属性_临时标志
您还可以考虑为进程提供全局异常处理程序。处理程序会在崩溃时退出之前删除自己的临时目录。
您的LoadLibrary/多线程讨论让我感到困惑,但这没关系 Windows上的临时文件通常不会被创建它们的进程以外的任何程序删除。如果用户运行“磁盘清理”util或类似工具,他可能会自动删除这些文件。我不认为这种情况经常发生 最佳方法。让您的应用程序在temp文件夹中创建一个子目录(可能还有每个流程实例的子文件夹)。当应用程序退出时,它会通过DeleteFile清理自己的一组临时文件。在应用程序重新启动时,它可以有一些逻辑来清理由于前一个进程崩溃而仍然存在的文件夹和文件 您还可以查看如何在CreateFile上使用FILE_属性_临时标志您还可以考虑为进程提供全局异常处理程序。处理程序会在崩溃时退出之前删除它自己的临时目录。
您可以使用FILE\u FLAG\u delete\u on\u CLOSE参数来创建文件吗?您可以使用FILE\u FLAG\u delete\u on\u CLOSE参数来创建文件吗?似乎与LoadLibrary()<代码>CreateFile()->LoadLibrary()
获取共享冲突<代码>加载库()->CreateFile()使程序崩溃CreateFile()->CloseHandle()->LoadLibrary()
load失败,因为文件被过早删除。共享冲突可能是因为CreateFile参数sharemode(第三个参数)中未指定文件共享删除。无论何时打开文件,都向CreateFile提供相同的参数。hfile=CreateFile(L“filename.txt”,GENERIC|u READ|GENERIC|u WRITE|DELETE,FILE|SHARE|u READ|FILE|WRITE|FILE|u SHARE|u DELETE,…)不,它仍然不允许LoadLibrary这样做。如果我切换顺序并传递OPEN\u EXISTING
而不是CREATE\u ALWAYS
,它确实可以工作,但它允许文件在那里,即使在关闭所有句柄之后也是如此。CreateFile(L“C:\\Temp\\temp1.txt”,GENERIC_READ | GENERIC_WRITE | DELETE | GENERIC_EXECUTE,FILE_SHARE | READ | FILE_SHARE | WRITE | FILE_SHARE | DELETE,NULL,OPEN |始终,FILE_标志_DELETE _ON _CLOSE,NULL);我已将现有的OPEN_替换为始终OPEN_。不,不删除。即使最后显式关闭句柄也不行。似乎与LoadLibrary()
冲突<代码>CreateFile()->LoadLibrary()获取共享冲突<代码>加载库()->CreateFile()使程序崩溃CreateFile()->CloseHandle()->LoadLibrary()
load失败,因为文件被过早删除。共享冲突可能是因为CreateFile参数sharemode(第三个参数)中未指定文件共享删除。无论何时打开文件,都向CreateFile提供相同的参数。hfile=CreateFile(L“filename.txt”,GENERIC|u READ|GENERIC|u WRITE|DELETE,FILE|SHARE|u READ|FILE|WRITE|FILE|u SHARE|u DELETE,…)不,它仍然不允许LoadLibrary这样做。如果我切换顺序并传递OPEN\u EXISTING
而不是CREATE\u ALWAYS
,它确实可以工作,但它允许文件在那里,即使在关闭所有句柄之后也是如此。CreateFile(L“C:\\Temp\\temp1.txt”,GENERIC_READ | GENERIC_WRITE | DELETE | GENERIC_EXECUTE,FILE_SHARE | READ | FILE_SHARE | WRITE | FILE_SHARE | DELETE,NULL,OPEN |始终,FILE_标志_DELETE _ON _CLOSE,NULL);我已将现有的OPEN_替换为始终OPEN_。不,不删除。即使在最后显式关闭句柄的情况下也是如此。全局异常处理程序是否也会解释被另一个进程显式终止的进程?你能提供更多的信息吗?顺便说一句,关于子目录的好提示。全局异常处理程序是否也会解释被另一个进程显式终止的进程?你能提供更多的信息吗?关于子目录的好提示。