尝试将文件复制到具有特定权限的文件夹时遇到问题。
这是我非常简单的测试程序:
#include <iostream>
#include <windows.h>
int main()
{
if(CopyFileA("D:/SOURCE/File.txt", "D:/LOCKED/dst1.txt", TRUE))
std::cout << "OK\n";
else
std::cout << "Fail\n";
if (CopyFileA("D:/SOURCE/File.txt", "D:/LOCKED/dst2.txt", TRUE))
std::cout << "OK\n";
else
std::cout << "Fail\n";
system("PAUSE");
}
Run Code Online (Sandbox Code Playgroud)
结果如下:
Fail
OK
Run Code Online (Sandbox Code Playgroud)
我可以复制任意数量的文件。对于每次运行,第一次总是失败,后续总是成功。错误是 ERROR_ACCESS_DENIED。
这是重要的细节:我的目标文件夹具有受限的权限,只有当我删除“写入属性”或“写入扩展属性”时才会出现此行为。

我使用了 sysInternals 的进程监视器:没有其他进程正在访问源文件和目标文件。但是,目标文件上的行为并不相似。第一次尝试关闭文件并尝试重新打开它。以下是日志:
| 行动 | 地位 | 细节 |
|---|---|---|
| 失败的尝试(第一次) | —— | —— |
| 创建文件 | 成功 | 所需访问:通用读/写、删除、写 DAC、处置:创建、选项:顺序访问、非目录文件、属性:A、ShareMode:无、AllocationSize:0、OpenResult:已创建 |
| 关闭文件 | 成功 | |
| 创建文件 | 拒绝访问 | 所需访问:通用读/写、删除、写 DAC、处置:OpenIf、选项:顺序访问、同步 IO 非警报、非目录文件、属性:A、共享模式:无、分配大小:0 |
| 创建文件 | 拒绝访问 | 所需访问:通用读/写、删除、写 DAC、处置:OpenIf、选项:顺序访问、同步 IO 非警报、非目录文件、属性:A、共享模式:读、写、分配大小:0 |
| 创建文件 | 拒绝访问 | 所需访问:通用读/写、写 DAC、处置:OpenIf、选项:顺序访问、同步 IO 非警报、非目录文件、属性:A、共享模式:读、写、分配大小:0 |
| 创建文件 | 拒绝访问 | 所需访问:通用读/写,处置:OpenIf,选项:顺序访问,同步 IO 非警报,非目录文件,属性:A,共享模式:无,分配大小:0 |
| 创建文件 | 拒绝访问 | 所需访问:通用读/写,处置:OpenIf,选项:顺序访问,同步 IO … |
我正在尝试使用OpenGL 2.1渲染场景,但是重叠形状上的边框很奇怪。我测试了一些OpenGL初始化,但是没有任何变化。我将问题简化为一个2球的简单测试应用程序,结果相同。
我尝试了有关Gl_DEPTH_TEST的几件事,启用/禁用平滑操作均未成功。
这是我用2 gluSphere的结果:
当一条线足以分隔蓝色和红色面时,我们可以看到某种混叠...
我使用SharpGL,但我认为它并不重要(因为我仅将其用作OpenGL包装器)。这是我渲染最简单的代码(可以将其复制到Form中进行测试):
OpenGL gl;
IntPtr hdc;
int cpt;
private void Init()
{
cpt = 0;
hdc = this.Handle;
gl = new OpenGL();
gl.Create(SharpGL.Version.OpenGLVersion.OpenGL2_1, RenderContextType.NativeWindow, 500, 500, 32, hdc);
gl.Enable(OpenGL.GL_DEPTH_TEST);
gl.DepthFunc(OpenGL.GL_LEQUAL);
gl.ClearColor(1.0F, 1.0F, 1.0F, 0);
gl.ClearDepth(1);
gl.MatrixMode(OpenGL.GL_PROJECTION);
gl.Perspective(30, 1, 0.1F, 1.0E+7F);
gl.MatrixMode(OpenGL.GL_MODELVIEW);
gl.LookAt(0, 3000, 0, 0, 0, 0, 0, 0, 1);
}
private void Render(int angle)
{
gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT | OpenGL.GL_STENCIL_BUFFER_BIT);
RenderSphere(gl, 0, 0, 0, 0, 300, Color.Red);
RenderSphere(gl, 0, 0, 100, angle, …Run Code Online (Sandbox Code Playgroud)