如何设置文件夹为只读模式?

wq425101 2007-09-21 04:21:05
如何用C++实现把一个文件夹设置为只读模式,锁住这个文件夹,等我用完后在删除它。以防止在使用过程中,文件夹被其他程序删除掉?
...全文
4667 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KenYuan2016 2007-09-21
  • 打赏
  • 举报
回复
vc 中 CFILE 类有这样的功能,你看看源代码
CFile类用来处理正常文件的I/O操作,它直接供无缓冲的、二进制磁盘输入/输出服务,并且通过其派生类间接支持文本文件和内存文件。因为CFile类是基本上封装在CArchive类之中了,所以我们只对这个类作简单介绍。

CFile类有三个构造函数,其原型如图所示。

virtual BOOL Open( LPCTSTR lpszFileName, UINT nOpenFlags,



CFileException* pError = NULL )



其中:hFile为一个已打开文件的句柄。LpszFileName指定所想要文件的路径的字符串。路径可以是相对的或绝对的。NOpenFlags指共享和存取方式,对于这个标志的说明,我们留到后面专门说明。

CFile类用Open来创建和打开文件。使用Open创建新文件,必须有一个文件名,并且选择一定的打开方式:

CFile对磁盘文件的定点读和写是通过函数Read ,Write和Seek进行的。

 

virtual UINT Read( void* lpBuf, UINT nCount );



 



virtual void Write( const void* lpBuf, UINT nCount );



 



virtual LONG Seek( LONG lOff, UINT nFrom );



函数Read:返回传输给缓冲区的字节数。如果读到文件尾,返回值可能小于nCount 值。LpBuf:指向用户定义的缓冲区的指针,用来接收数据;nCount:要从文件中读出的最大字节数;函数Write:写缓冲区数据到文件中;Seek用于定位文件指针位置,如果所请求的位置合法,则返回距离文件头的新字节偏移。

文件的打开和关闭是相对的,打开一个文件之后,必须把它关闭,文件的关闭是相当简单的,用CFile对象调用Close函数即可。

下面描述文件共享和存取标志。下列标志指定打开文件时可执行的动作。可以用OR来组合下面所列的选项。一个存取许可和一个共享选项是必需的;modeCreate 和modeNoInberit方式是可选的。

modeCreate指示构造函数创建一个新文件,如果该文件已存在,则该文件截短为0。
modeRead 打开文件用于读。
modeReadWrite 打开文件用于读写。
modeWrite 打开文件用于只写。
modeNoInberit 阻止文件被子进程继承。
shareDenyNone 打开文件,不允许其它进程读或写该文件。如果该文件已由其它任何进程用兼容方式打开,则Create将失败。
shareDenyWrite 打开文件,不允许其它进程写该文件。如果该文件已由其它任何进程用兼容方式或写方式打开,则Create将失败。
shareDenyRead 打开文件,不允许其它进程读该文件。如果该文件已由其它任何进程用兼容方式或读方式打开,则Create将失败。
shareExclusive 以独占方式打开文件,不允许其它进程写该文件。如果该文件已用其它读或写方式打开,即使是当前进程打开,则构造也将失败。
shareCompat 以兼容方式打开文件,允许给定机器上任何进程打开该文件任意次。如果该文件已用其它任何共享方式打开,构造将失败。
typeText 设置文本方式,对回车换行进行特殊处理,它只用于派生类。
typeBinary 设置二进制方式,它只用于派生类。
KenYuan2016 2007-09-21
  • 打赏
  • 举报
回复
以独占方式打开该文件
arong1234 2007-09-21
  • 打赏
  • 举报
回复
在NTFS中,应该用ACE控制
arong1234 2007-09-21
  • 打赏
  • 举报
回复
似乎永远显示为只读,不要care这个,没啥用处得
wq425101 2007-09-21
  • 打赏
  • 举报
回复
DWORD dwAttrs=GetFileAttributes(file.c_str());
if (dwAttrs==INVALID_FILE_ATTRIBUTES) return 0;

if (!(dwAttrs & FILE_ATTRIBUTE_READONLY))
{
SetFileAttributes(file.c_str(),
dwAttrs | FILE_ATTRIBUTE_READONLY);
}

我把文改成只读了,可怎么不只读取消掉啊。
if (!(dwAttrs & FILE_ATTRIBUTE_NORMAL))
{
SetFileAttributes(file.c_str(),
dwAttrs | FILE_ATTRIBUTE_NORMAL);
}
这么做不对啊,改不会来,为什么
arong1234 2007-09-21
  • 打赏
  • 举报
回复
似乎缺省就是只读的,但是这阻止不了你删除它

64,646

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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