小编Kiw*_*une的帖子

Windows CopyFileA 失败然后成功

尝试将文件复制到具有特定权限的文件夹时遇到问题。

这是我非常简单的测试程序:

#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 …

c++ windows file

12
推荐指数
1
解决办法
452
查看次数

OpenGL重叠式丑陋渲染

我正在尝试使用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)

opengl opengl-compat

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

标签 统计

c++ ×1

file ×1

opengl ×1

opengl-compat ×1

windows ×1