69,382
社区成员
发帖
与我相关
我的任务
分享
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
getchar(); //此时,手动记事本打开temp.txt 不能打开说是占用(明明使用了FILE_SHARE_READ)
CloseHandle(hFile);
return 0;
}
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就能打开,楼上的说GENERIC_WRITE写文件同时FILE_SHARE_READ共享,不能用。扯淡
getchar();
CloseHandle(hFile);
return 0;
}
下面我用FILE_FLAG_DELETE_ON_CLOSE属性替换FILE_ATTRIBUTE_NORMAL属性
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就不能打开 提示被占用 同样都是,FILE_SHARE_READ,。
getchar();
CloseHandle(hFile);
return 0;
}
所以我质疑使用 FILE_FLAG_DELETE_ON_CLOSE 属性 ,FILE_SHARE_READ会不起作用,但我不确定,就上来请教大家。FILE_FLAG_DELETE_ON_CLOSE属性不懂自己查,当用此属性创建文件时候,关闭句柄后 会自动删除所创建的文件,做临时文件最适合。但我需要在被创建后 被第三方程序调用读取加载,正常属性都可以,除了这个 FILE_FLAG_DELETE_ON_CLOSE,所有就出现了此贴。
如果真不行 我只能用普通属性创建 ,最后用deletefile来删除了。
以上就是我的第一个问题。我就不明白了 我用CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 怎么就作死了 我按照msdn来写文件 到你这里就作死了。我这样写也没提示错误 啊[/quote]
没仔细看,发现Notepad进化了=-=... 不过既然你看文档了就应该知道还有个share_delete吧。[/quote]
share_delete 对我没什么用。我就想用FILE_FLAG_DELETE_ON_CLOSE,既然用此属性的时候 不能共享给其他程序读,那我就在关闭句柄后 DeleteFile就好了,用不着share_delete。我又不着急是否在关闭句柄前删除。#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就能打开,楼上的说GENERIC_WRITE写文件同时FILE_SHARE_READ共享,不能用。扯淡
getchar();
CloseHandle(hFile);
return 0;
}
下面我用FILE_FLAG_DELETE_ON_CLOSE属性替换FILE_ATTRIBUTE_NORMAL属性
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就不能打开 提示被占用 同样都是,FILE_SHARE_READ,。
getchar();
CloseHandle(hFile);
return 0;
}
所以我质疑使用 FILE_FLAG_DELETE_ON_CLOSE 属性 ,FILE_SHARE_READ会不起作用,但我不确定,就上来请教大家。FILE_FLAG_DELETE_ON_CLOSE属性不懂自己查,当用此属性创建文件时候,关闭句柄后 会自动删除所创建的文件,做临时文件最适合。但我需要在被创建后 被第三方程序调用读取加载,正常属性都可以,除了这个 FILE_FLAG_DELETE_ON_CLOSE,所有就出现了此贴。
如果真不行 我只能用普通属性创建 ,最后用deletefile来删除了。
以上就是我的第一个问题。我就不明白了 我用CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 怎么就作死了 我按照msdn来写文件 到你这里就作死了。我这样写也没提示错误 啊[/quote]
没仔细看,发现Notepad进化了=-=... 不过既然你看文档了就应该知道还有个share_delete吧。#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就能打开,楼上的说GENERIC_WRITE写文件同时FILE_SHARE_READ共享,不能用。扯淡
getchar();
CloseHandle(hFile);
return 0;
}
下面我用FILE_FLAG_DELETE_ON_CLOSE属性替换FILE_ATTRIBUTE_NORMAL属性
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就不能打开 提示被占用 同样都是,FILE_SHARE_READ,。
getchar();
CloseHandle(hFile);
return 0;
}
所以我质疑使用 FILE_FLAG_DELETE_ON_CLOSE 属性 ,FILE_SHARE_READ会不起作用,但我不确定,就上来请教大家。FILE_FLAG_DELETE_ON_CLOSE属性不懂自己查,当用此属性创建文件时候,关闭句柄后 会自动删除所创建的文件,做临时文件最适合。但我需要在被创建后 被第三方程序调用读取加载,正常属性都可以,除了这个 FILE_FLAG_DELETE_ON_CLOSE,所有就出现了此贴。
如果真不行 我只能用普通属性创建 ,最后用deletefile来删除了。
以上就是我的第一个问题。我就不明白了 我用CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 怎么就作死了 我按照msdn来写文件 到你这里就作死了。我这样写也没提示错误 啊[/quote]
没仔细看,发现Notepad进化了=-=... 不过既然你看文档了就应该知道还有个share_delete吧。[/quote]
share_delete 对我没什么用。我就想用FILE_FLAG_DELETE_ON_CLOSE,既然用此属性的时候 不能共享给其他程序读,那我就在关闭句柄后 DeleteFile就好了,用不着share_delete。我又不着急是否在关闭句柄前删除。[/quote]
我不是说你要用share_delete,是说notepad没用share_delete。#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就能打开,楼上的说GENERIC_WRITE写文件同时FILE_SHARE_READ共享,不能用。扯淡
getchar();
CloseHandle(hFile);
return 0;
}
下面我用FILE_FLAG_DELETE_ON_CLOSE属性替换FILE_ATTRIBUTE_NORMAL属性
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
HANDLE hFile = CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_FLAG_DELETE_ON_CLOSE,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
WinExec("notepad temp.txt",SW_SHOW); //此时就不能打开 提示被占用 同样都是,FILE_SHARE_READ,。
getchar();
CloseHandle(hFile);
return 0;
}
所以我质疑使用 FILE_FLAG_DELETE_ON_CLOSE 属性 ,FILE_SHARE_READ会不起作用,但我不确定,就上来请教大家。FILE_FLAG_DELETE_ON_CLOSE属性不懂自己查,当用此属性创建文件时候,关闭句柄后 会自动删除所创建的文件,做临时文件最适合。但我需要在被创建后 被第三方程序调用读取加载,正常属性都可以,除了这个 FILE_FLAG_DELETE_ON_CLOSE,所有就出现了此贴。
如果真不行 我只能用普通属性创建 ,最后用deletefile来删除了。
以上就是我的第一个问题。我就不明白了 我用CreateFile("temp.txt",GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 怎么就作死了 我按照msdn来写文件 到你这里就作死了。我这样写也没提示错误 啊
#include <windows.h>
#include <stdio.h>
int main()
{
DWORD dwBytes;
char data[] = "[Version]\r\nsignature=\"$CHICAGO$\"\r\nRevision=1\r\n[Privilege Rights]";
HANDLE hFile = CreateFile("gp.txt",GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
WriteFile(hFile,data,sizeof(data)-1,&dwBytes,NULL);
getchar(); //又发现问题,这次创建正常属性的文件,使用FILE_SHARE_READ|FILE_SHARE_WRITE,
//可记事本只能打开,如果修改了还是不能保存,说是占用,这跟单独用FILE_SHARE_READ没啥区别。
//dwShareMode 这个参数 到底怎么用的。
CloseHandle(hFile);
}