接收共享冲突打开文件代码32

时间:2011-09-24 08:57:26

标签: c++ file winapi

我一直在尝试以下一段不起作用的代码。我想要做的是开始执行我的exe(我使用VC6.0创建一个简单的基于对话框的应用程序),然后从这个应用程序内部修改自己存储在硬盘上的内容。

因此有一个exe的运行副本,从这个正在运行的副本中它将打开磁盘副本到缓冲区。一旦加载到缓冲区,然后开始搜索字符串。一旦找到该字符串,它将被另一个字符串替换,该字符串可能与原始字符串的大小不同。

现在我遇到了无法在磁盘上打开文件进行读/写的问题。 GetLastError返回以下错误“ERROR_SHARING_VIOLATION该进程无法访问该文件,因为它正被另一个进程使用。”。

所以我做了什么我将磁盘上的文件重命名为另一个名称(除扩展名外必须使用相同的名称)。有关共享违规的同样错误。我不知道为什么我得到这个共享违规错误代码为32.任何建议将不胜感激。我会在另一个帖子中问我问题的第二部分。

FILE * pFile;

pFile = fopen ("Test.exe","rb");

if (pFile != NULL)
{
     // do something like search for a string
}
else
{
    // fopen failed.
    int value = GetLastError();  // returns 32

    exit(1);
}

1 个答案:

答案 0 :(得分:2)

阅读File Locking维基百科条目的Windows部分:您无法修改当前正在执行的文件。

您可以重命名和复制它们,但不能更改它们。所以你想做的事情根本不可能。 (重命名文件根本不解锁它,重命名后它仍然是同一个文件,因此仍然无法修改。)

您可以复制可执行文件,修改该副本,然后运行该文件。