C++更改文件属性可以采用两种办法,一种是通过system()函数,另一种是通过SetFileAttributes()函数。
1.通过system()
通过这个函数可以调用系统命令来操作,用它来调用ATTRIB命令来操作。
这就是这个命令的使用方法,可以通过system()来调用它来操作。
举例
#include <stdlib.h>
int main()
{
system("ATTRIB +r +S +h C:\\1.jpg");
return 0;
}
2.通过SetFileAttributes()
通过system()是需要cmd去调用命令的,这个函数是一个API,可以脱离cmd,所以它更好用。
函数原型如下
BOOL SetFileAttributes(LPCTSTR lpFileName,DWORD dwFileAttributes);
举例
#include <Windows.h>
int main()
{
SetFileAttributes("C:\\1.exe",FILE_ATTRIBUTE_HIDDEN);
return 0;
}
这个函数的第一个参数是要操作的文件的路径,第二个参数是要更改的属性,这个是添加属性。
属性有很多,如下
——————————————————————————————————————————————————————
FILE_ATTRIBUTE_ARCHIVE
该文件是一个存档文件。应用程序使用此属性来备份或移除标记文件。
FILE_ATTRIBUTE_HIDDEN
该文件是隐藏的。它不包括在普通的目录列表。
FILE_ATTRIBUTE_NORMAL
该文件没有设置其他的属性。此属性仅在单独使用有效。
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
该文件将不被内容索引服务编制索引。
FILE_ATTRIBUTE_OFFLINE
该文件的数据不是立即可用。此属性表明文件数据被物理移动到离线存储。此属性用于通过远程存储,分层存储管理软件。应用程序不应随意更改此属性。
FILE_ATTRIBUTE_READONLY
该文件是只读的。应用程序可以读取该文件,但不能写入或删除它。
FILE_ATTRIBUTE_SYSTEM
该文件是操作系统的一部分,或者完全由它使用。
FILE_ATTRIBUTE_TEMPORARY
该文件是被用于暂时存储。文件系统避免写入数据传回海量存储如果有足够的缓存内存可用,因为经常在应用程序删除后不久,这个句柄被关闭的临时文件。在这种情况下,该系统可以完全避免记录的数据。否则,在手柄关闭的数据将被写入。
如果想去除一个属性的话可以在第二个参数中这么写
#include <Windows.h>
int main()
{
SetFileAttributes("C:\\1.exe",-FILE_ATTRIBUTE_HIDDEN);
return 0;
}
前面加上一个减号,后面加上属性。
我们有的时候一下要加好几个属性(或者去除属性),我们不一定要重复调用函数,我们可以把多个属性用特定的符号"|"连接起来。
举例
#include <Windows.h>
int main()
{
SetFileAttributes("C:\\1.exe",FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_READONLY);
return 0;
}
如果程序运行了没效果可能是权限问题,可以试试以管理员身份运行。
好了,这就是更改文件属性了,谢谢各位,欢迎提建议!