首页 > 代码库 > C/C++ 文件属性设置(隐藏、只读、加密等)

C/C++ 文件属性设置(隐藏、只读、加密等)

在MSDN中,文件总共有15种属性,根据磁盘的分区格式不同,文件的属性也会不同。
  1. GetFileAttributes 获取文件属性函数的返回值

 

返回字段

返回值

属性类型

FILE_ATTRIBUTE_READONLY

1

只读

FILE_ATTRIBUTE_HIDDEN

2

隐藏

FILE_ATTRIBUTE_SYSTEM

4

系统

FILE_ATTRIBUTE_DIRECTORY

16

目录

FILE_ATTRIBUTE_ARCHIVE

32

存档

FILE_ATTRIBUTE_DEVICE

64

保留

FILE_ATTRIBUTE_NORMAL

128

正常

FILE_ATTRIBUTE_TEMPORARY

256

临时

FILE_ATTRIBUTE_SPARSE_FILE

512

稀疏文件

FILE_ATTRIBUTE_REPARSE_POINT

1024

超链接或快捷方式

FILE_ATTRIBUTE_COMPRESSED

2048

压缩

FILE_ATTRIBUTE_OFFLINE

4096

脱机

FILE_ATTRIBUTE_NOT_CONTENT_INDEXED

8192

索引

FILE_ATTRIBUTE_ENCRYPTED

16384

加密

FILE_ATTRIBUTE_VIRTUAL

65536

虚拟

 

橙色标记的属性为Windows系统中文件的公有属性,其中“只读”、“隐藏”、“系统”、“存档”为文件的四种基本属性。compressed,content_indexed,encrypted只存在于NTFS分区中。

文件去掉全部属性后(四种基本属性),将自动标记为normal。同时具有system和hidden属性的文件会在系统中彻底隐形,这也是病毒常用的伎俩。

commpressed和encrypted不能共存。默认情况下文件都有content_indexed属性

 

  2.SetFileAttributes 设置文件属性函数

设置文件属性: SetFileAttributes(文件名, 属性值)

SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY); // 设定为只读

SetFileAttributes(文件名, FILE_ATTRIBUTE_HIDDEN );       //设定为隐藏

SetFileAttributes(文件名, FILE_ATTRIBUTE_SYSTEM);      //设定为系统

SetFileAttributes(文件名, FILE_ATTRIBUTE_ARCHIVE);   //设定为保存

SetFileAttributes(文件名, FILE_ATTRIBUTE_NORMAL);     //设定为一般 (取消前四种属性)

设定二种以上的属性:

  • 设定为只读 + 隐藏

SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN); 

  • 设定为只读 + 隐藏 + 系统 + 保存

SetFileAttributes(文件名, FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN _
| FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE);

  • 取消所有设定

SetFileAttributes(文件名, FILE_ATTRIBUTE_NORMAL);

 

-成功返回1-65536 ,错误返回0;

-#include <windows.h> 头文件;

VC

里移动和复制文件,删除文件的方法

 

文件属性设置的方法

 

 

CopyFile

MoveFile

SetFileAttributes

rename 

BOOL CopyFile( 

  LPCTSTR

 

 

lpExistingFileName

// name of an existing file 

  LPCTSTR

 

 

lpNewFileName

,      

// name of new file 

  BOOL

 

 

bFailIfExists

          // operation if file exists 

); 

 

注意:

 

1

、文件的路径名中必须是为

\\

,而不是

\

\

是无效的,我已经试过了

 

2

 

bFailIfExists

  

的值为

TRUE

时,如果要复制的文件在目标文件夹下已经存

在,则复制失败。值为

FALSE,

则允许覆盖。

 

 

BOOL MoveFile( 

  LPCTSTR

 

 

lpExistingFileName

// file name 

  LPCTSTR

 

 

lpNewFileName

       // new file name 

); 

注意:

 

其复制的文件名和

CopyFile

也是一样的。

 

 

DeleteFile 

The 

DeleteFile

 function deletes an existing file.  

BOOL DeleteFile( 

  LPCTSTR

 

 

lpFileName

   // file name 

);

 

 

 

 

BOOL SetFileAttributes( 

  LPCTSTR

 

 

lpFileName

,      

// file name 

  DWORD

 

 

dwFileAttributes

   // attributes 

);

 

注意:

 

 

dwFileAttributes

为属性设置,有如下

 

 

 

 

int

 

rename(

 

const

 

char

 

*

oldname

,

 

const

 

char

 

*

newname

 

); 

oldname

newname 

也是一样是文件名(包含路径),

 

 

上面三个函数的返回值如果为

0

,则说明操作失败,为非零值说明操作成功。

 

 

以上两个函数包含在

windows.h

头文件中。

 

 

例子

 

 

#include <windows.h> 

#include <iostream> 

using namespace std; 

 

void main() 

  CopyFile("D:\\DSC00008.JPG","E:\\mv\\1.jpg",false); 

  MoveFile("D:\\javahe

MySQL

实例

.doc","E:\\mv\\2.doc"); 

SetFileAttributes("E:\\mv\\2.doc",FILE_ATTRIBUTE_HIDDEN); 

rename("E:\\mv\\2.doc","E:\\mv\\javahe

MySQL

实例

.doc"); 

  cout<<"

复制成功

"; 

 

 

还有

CreateFile

,在

MSDN

里可以查到。要用到的时候再去查询吧

 

C/C++ 文件属性设置(隐藏、只读、加密等)