分类: WINDOWS
2009-12-16 21:47:25
#include
#include
#include
using namespace std;
void main()
{
string strName = "a.txt";
SetFileAttributes(strName.c_str(), FILE_ATTRIBUTE_NORMAL);
HANDLE h0 = CreateFile(strName.c_str(), GENERIC_READ, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
int iRet = _unlink(strName.c_str());
HANDLE h1 = CreateFile(strName.c_str(), GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
}
1. _unlink删除会成功, 第二个CreateFile会失败, 因为这个文件在文件系统中已经标记为删除, 但是这个文件还被引用中, 所以并没有真正删除, 所以无法再打开了.
2. 如果把第一个句柄关闭, 则在文件系统中a.txt也马上被删除了. 第二次就可以打开.