精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● VB和Basic>>〓〓..API 函数使用..〓〓>>文件系统>>[转载]修改文件属性(附代码)

主题:[转载]修改文件属性(附代码)
发信人: winsy(鹰派)
整理人: winsy(2003-03-05 15:32:05), 站内信件
原文转自CSDN

BOOL  SetFileAttributes(  
       LPCTSTR  lpFileName,            //  address  of  filename    
       DWORD  dwFileAttributes              //  address  of  attributes  to  set    
     );  
dwFileAttributes:  
FILE_ATTRIBUTE_ARCHIVE              
FILE_ATTRIBUTE_HIDDEN  
FILE_ATTRIBUTE_NORMAL              
FILE_ATTRIBUTE_OFFLINE                          
FILE_ATTRIBUTE_READONLY              
FILE_ATTRIBUTE_SYSTEM              
FILE_ATTRIBUTE_TEMPORARY  
---------------------------------------------------------------  
 
 
SetAttr  语句  
             
 
为一个文件设置属性信息。  
 
语法  
 
SetAttr  pathname,  attributes  
 
SetAttr  语句的语法含有以下这些命名参数:  
 
部分  描述    
pathname  必要参数。用来指定一个文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。    
Attributes  必要参数。常数或数值表达式,其总和用来表示文件的属性。    
 
 
设置值  
 
attributes  参数设置可为:  
 
常数  值  描述    
vbNormal  0  常规(缺省值)    
VbReadOnly  1  只读。    
vbHidden  2  隐藏。    
vbSystem  4  系统文件    
vbArchive  32  上次备份以后,文件已经改变    
 
 
注意  这些常数是由  VBA  所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。  
 
说明  
 
如果想要给一个已打开的文件设置属性,则会产生运行时错误。  
 
 
 
 
SetAttr  语句示例  
本示例使用  SetAttr  语句来设置文件属性。  
 
SetAttr  "TESTFILE  ",  vbHidden      '  设置隐含属性。  
SetAttr  "TESTFILE  ",  vbHidden  +  vbReadOnly      '  设置隐含并只读。  
 
 
---------------------------------------------------------------  
SetFileAttributes    
 
VB声明    
Declare  Function  SetFileAttributes  Lib    "kernel32  "  Alias    "SetFileAttributesA  "  (ByVal  lpFileName  As  String,  ByVal  dwFileAttributes  As  Long)  As  Long    
说明    
设置文件属性    
返回值    
Long,非零表示成功,零表示失败。会设置GetLastError    
参数表    
参数  类型及说明    
lpFileName  String,要设置其属性的文件名    
dwFileAttributes  Long,带有FILE_ATTRIBUTE_??前缀的一个或多个常数    
 
'Read  and  Write  
Const  MOVEFILE_REPLACE_EXISTING  =  &H1  
Const  FILE_ATTRIBUTE_TEMPORARY  =  &H100  
Const  FILE_BEGIN  =  0  
Const  FILE_SHARE_READ  =  &H1  
Const  FILE_SHARE_WRITE  =  &H2  
Const  CREATE_NEW  =  1  
Const  OPEN_EXISTING  =  3  
Const  GENERIC_READ  =  &H80000000  
Const  GENERIC_WRITE  =  &H40000000  
Private  Declare  Function  SetVolumeLabel  Lib    "kernel32  "  Alias    "SetVolumeLabelA  "  (ByVal  lpRootPathName  As  String,  ByVal  lpVolumeName  As  String)  As  Long  
Private  Declare  Function  WriteFile  Lib    "kernel32  "  (ByVal  hFile  As  Long,  lpBuffer  As  Any,  ByVal  nNumberOfBytesToWrite  As  Long,  lpNumberOfBytesWritten  As  Long,  ByVal  lpOverlapped  As  Any)  As  Long  
Private  Declare  Function  ReadFile  Lib    "kernel32  "  (ByVal  hFile  As  Long,  lpBuffer  As  Any,  ByVal  nNumberOfBytesToRead  As  Long,  lpNumberOfBytesRead  As  Long,  ByVal  lpOverlapped  As  Any)  As  Long  
Private  Declare  Function  CreateFile  Lib    "kernel32  "  Alias    "CreateFileA  "  (ByVal  lpFileName  As  String,  ByVal  dwDesiredAccess  As  Long,  ByVal  dwShareMode  As  Long,  ByVal  lpSecurityAttributes  As  Any,  ByVal  dwCreationDisposition  As  Long,  ByVal  dwFlagsAndAttributes  As  Long,  ByVal  hTemplateFile  As  Long)  As  Long  
Private  Declare  Function  CloseHandle  Lib    "kernel32  "  (ByVal  hObject  As  Long)  As  Long  
Private  Declare  Function  SetFilePointer  Lib    "kernel32  "  (ByVal  hFile  As  Long,  ByVal  lDistanceToMove  As  Long,  lpDistanceToMoveHigh  As  Long,  ByVal  dwMoveMethod  As  Long)  As  Long  
Private  Declare  Function  SetFileAttributes  Lib    "kernel32  "  Alias    "SetFileAttributesA  "  (ByVal  lpFileName  As  String,  ByVal  dwFileAttributes  As  Long)  As  Long  
Private  Declare  Function  GetFileSize  Lib    "kernel32  "  (ByVal  hFile  As  Long,  lpFileSizeHigh  As  Long)  As  Long  
Private  Declare  Function  GetTempFileName  Lib    "kernel32  "  Alias    "GetTempFileNameA  "  (ByVal  lpszPath  As  String,  ByVal  lpPrefixString  As  String,  ByVal  wUnique  As  Long,  ByVal  lpTempFileName  As  String)  As  Long  
Private  Declare  Function  MoveFileEx  Lib    "kernel32  "  Alias    "MoveFileExA  "  (ByVal  lpExistingFileName  As  String,  ByVal  lpNewFileName  As  String,  ByVal  dwFlags  As  Long)  As  Long  
Private  Declare  Function  DeleteFile  Lib    "kernel32  "  Alias    "DeleteFileA  "  (ByVal  lpFileName  As  String)  As  Long  
Private  Sub  Form_Load()  
       'KPD-Team  1998  
       'URL:  http://www.allapi.net/  
       'E-Mail:  [email protected]  
       Dim  sSave  As  String,  hOrgFile  As  Long,  hNewFile  As  Long,  bBytes()  As  Byte  
       Dim  sTemp  As  String,  nSize  As  Long,  Ret  As  Long  
       'Ask  for  a  new  volume  label  
       sSave  =  InputBox(  "Please  enter  a  new  volume  label  for  drive  C:\  "  +  vbCrLf  +    "  (if  you  don't  want  to  change  it,  leave  the  textbox  blank)  ")  
       If  sSave    < >    "  "  Then  
               SetVolumeLabel    "C:\  ",  sSave  
       End  If  
 
       'Create  a  buffer  
       sTemp  =  String(260,  0)  
       'Get  a  temporary  filename  
       GetTempFileName    "C:\  ",    "KPD  ",  0,  sTemp  
       'Remove  all  the  unnecessary  chr$(0)'s  
       sTemp  =  Left$(sTemp,  InStr(1,  sTemp,  Chr$(0))  -  1)  
       'Set  the  file  attributes  
       SetFileAttributes  sTemp,  FILE_ATTRIBUTE_TEMPORARY  
       'Open  the  files  
       hNewFile  =  CreateFile(sTemp,  GENERIC_WRITE,  FILE_SHARE_READ  Or  FILE_SHARE_WRITE,  ByVal  0&,  OPEN_EXISTING,  0,  0)  
       hOrgFile  =  CreateFile(  "c:\config.sys  ",  GENERIC_READ,  FILE_SHARE_READ  Or  FILE_SHARE_WRITE,  ByVal  0&,  OPEN_EXISTING,  0,  0)  
 
       'Get  the  file  size  
       nSize  =  GetFileSize(hOrgFile,  0)  
       'Set  the  file  pointer  
       SetFilePointer  hOrgFile,  Int(nSize  /  2),  0,  FILE_BEGIN  
       'Create  an  array  of  bytes  
       ReDim  bBytes(1  To  nSize  -  Int(nSize  /  2))  As  Byte  
       'Read  from  the  file  
       ReadFile  hOrgFile,  bBytes(1),  UBound(bBytes),  Ret,  ByVal  0&  
       'Check  for  errors  
       If  Ret    < >  UBound(bBytes)  Then  MsgBox    "Error  reading  file  ...  "  
 
       'Write  to  the  file  
       WriteFile  hNewFile,  bBytes(1),  UBound(bBytes),  Ret,  ByVal  0&  
       'Check  for  errors  
       If  Ret    < >  UBound(bBytes)  Then  MsgBox    "Error  writing  file  ...  "  
 
       'Close  the  files  
       CloseHandle  hOrgFile  
       CloseHandle  hNewFile  
 
       'Move  the  file  
       MoveFileEx  sTemp,    "C:\KPDTEST.TST  ",  MOVEFILE_REPLACE_EXISTING  
       'Delete  the  file  
       DeleteFile    "C:\KPDTEST.TST  "  
       Unload  Me  
End  Sub  

[关闭][返回]