在访 c:\\...txt 时发生共享违例

hunt2088 2010-04-16 10:06:21
程序新建了一个文本文件, 然后时刻向其写入数据。 每当双击打开该文本文件时,提示在访 c:\\...txt 时发生共享违例

文件操作源代码:
CString strTime;
char szPathTemp[MAX_PATH];
char * temp = ".txt";
HANDLE hFile;

strTime = time.Format("\\%Y%m%d");
strcpy(szPathTemp, szPath);
strncat(szPathTemp, strTime, 9);
strncat(szPathTemp, temp, 4);

//文件不存在
if(!PathFileExists(szPathTemp))
{
//新建文件
hFile = CreateFile(szPathTemp, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, \
NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox("创建文件失败!");

return;
}
else
{
lLogID = 0;
CFile logFile(hFile);
CString logTemp;

logTemp.Format("记录数目: 00000\r\n\r\n # 时间 进程 PID 操 作 路径\r\n");
logFile.Write(logTemp, strlen(logTemp));
logFile.Flush();
logFile.Close();
//关闭文件句柄
CloseHandle(hFile);
}
}
else //文件存在
{
CFile logFile;
BOOL ret;
CFileException ex;

ret = logFile.Open(szPathTemp, CFile::modeWrite | CFile::shareDenyNone, &ex);

if(!ret)
{
MessageBox("打开文件失败!");
CString str;
char szError[1024];
ex.GetErrorMessage(szError, 1024);
str.Format("%s", szError);
MessageBox(str);

return;
}
else
{
CString logTemp;
strTime = time.Format("%H:%M:%S");
lLogID++;

logTemp.Format("%d %s %s %s %s\r\n", \
lLogID, strTime, vData.pProName, vData.chOperation, vData.chPath);
logFile.SeekToEnd();
logFile.Write(logTemp, strlen(logTemp));
logFile.Flush();

logFile.SeekToBegin();
logTemp.Format("记录数目: %d \r\n\r\n", lLogID);
logFile.Write(logTemp, strlen(logTemp));
logFile.Flush();

logFile.Close();
}

}
...全文
403 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hunt2088 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 lmxmx 的回复:]
引用 4 楼 lfs09 的回复:
那个啥,你的文件打开是多少时间打开一次,如果你的文件打开很频繁的话,你手动打开的时候,刚好程序在使用这个文件呢.程序关掉后可以手动吧,应该


不应该啊……他的共享权限都打开了……
[/Quote]

是啊
lmxmx 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lfs09 的回复:]
那个啥,你的文件打开是多少时间打开一次,如果你的文件打开很频繁的话,你手动打开的时候,刚好程序在使用这个文件呢.程序关掉后可以手动吧,应该
[/Quote]

不应该啊……他的共享权限都打开了……
jyh_baoding 2010-04-16
  • 打赏
  • 举报
回复
应该不会有事啊
你妹的特盗不 2010-04-16
  • 打赏
  • 举报
回复
那个啥,你的文件打开是多少时间打开一次,如果你的文件打开很频繁的话,你手动打开的时候,刚好程序在使用这个文件呢.程序关掉后可以手动吧,应该

hunt2088 2010-04-16
  • 打赏
  • 举报
回复
分析了一下 可能不是此处的问题
soswaidao 2010-04-16
  • 打赏
  • 举报
回复
友情帮顶,友情帮顶
soswaidao 2010-04-16
  • 打赏
  • 举报
回复
友情帮顶,友情帮顶
hunt2088 2010-04-16
  • 打赏
  • 举报
回复
希望大牛来分析一下
hunt2088 2010-04-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 hunt2088 的回复:]
程序是这样的 :hook NtCreateFile,然后与应用程序通信,频繁地写日志文件。

原因已经找到了,是驱动中 NewNtCreateFile 没有处理好,导致系统对该文件操作(比如打开)的处理(某一阶段)没有完成,而此时应用程序又要写日志, 所以导致共享违例
[/Quote]

虽然设置了共享权限, 由于涉及到底层,不太懂
ylke2007 2010-04-16
  • 打赏
  • 举报
回复
ding一下
hunt2088 2010-04-16
  • 打赏
  • 举报
回复
谢谢大家
hunt2088 2010-04-16
  • 打赏
  • 举报
回复
程序是这样的 :hook NtCreateFile,然后与应用程序通信,频繁地写日志文件。

原因已经找到了,是驱动中 NewNtCreateFile 没有处理好,导致系统对该文件操作(比如打开)的处理(某一阶段)没有完成,而此时应用程序又要写日志, 所以导致共享违例

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧