三星Galaxy S24系列AI手机热销中
全世界各行各业联合起来,internet一定要实现!

改变指定的文件和文件夹的属性

2004-02-15 eNet&Ciweek

  ////查找并修改符合条件的文件和文件夹

    HANDLE handle=FindFirstFile
    ( FileName, &fileinfo );
    if(handle==INVALID_HANDLE_VALUE)
    return 0;
    do{
    if(fileinfo.cFileName[0]=='.')
    continue;
    strcpy(allname,pathname);
    strcat(allname,fileinfo.cFileName);

  //检取文件属性

  stat=GetFileAttributes(allname);
    if(stat==0xffffffff){
    MessageBox("警告,获取文件信息时出 错!!",
    allname,MB_OK MB_
    ICONINFORMATION);
    continue;
    }

  //设置文件属性

  BOOL tt=SetFileAttributes(allname,0);
    if(!tt){
    MessageBox("警告,文件信息出错!!",
    allname,MB_OK MB_
    ICONINFORMATION);
    continue;
    }

  HANDLE hd=CreateFile(allname,
    GENERIC_WRITE, FILE_SHARE_WRITE,
    NULL,OPEN_EXISTING,
    FILE_FLAG_BACKUP_SEMANTICS,NULL);
    if(hd!=INVALID_HANDLE_VALUE){
    SYSTEMTIME st[3];
    GetLocalTime(&st[0]);
    st[1]=st[0];st[2]=st[0];
    FILETIME ft[3];
    FILETIME lft[3];
    BYTE ff[3];
    ff[0]=0;ff[1]=0;ff[2]=0;

  //改变文件访问时间

  if(m_ACCESS){
    ff[0]=1;
    st[0].wDay =m_ADAY;st[0].
    wMonth=m_AMONTH;
    st[0].wYear=m_AYEAR;
    BOOL bb=SystemTime
    ToFileTime(&st[0],&ft[0]);
    bb=LocalFileTime
    oFileTime(&ft[0],&lft[0]);
    }

  //改变文件产生时间

  if(m_CREATE){
    ff[1]=1;
    st[1].wDay=m_CDAY;st[1].
    wHour=m_CHOUR;st[1].
    wMinute=m_CMINUTE;
    st[1].wMonth=m_
    CMONTH;st[1].
    wSecond=m_CSECOND;
    st[1].wYear=m_CYEAR;
    BOOL bb=SystemTime
    ToFileTime(&st[1],&ft[1]);
    bb=LocalFileTime
    ToFileTime(&ft[1],&lft[1]);
    }

  //改变文件修改时间

  if(m_MODIFY){
    ff[2]=1;
    st[2].wDay=m_MDAY;st[2].
    wHour=m_MHOUR;st[2].
    wMinute=m_MMINUTE;
    st[2].wMonth=m_MMONTH
    ;st[2].
    wSecond=m_MSECOND;
    st[2].wYear=m_MYEAR;
    BOOL bb=System
    TimeToFileTime(&st[2],&ft[2]);
    bb=LocalFileTime
    ToFileTime(&ft[2],&lft[2]);
    }

  //改变文件时间

  BOOL tt=SetFile
    Time(hd,ff[1]?&lft[1]:
    NULL,ff[0]?&lft[0]:
    NULL,ff[2]?&lft[2]:NULL);
    if(!tt){
    MessageBox("警告,文件信息出错!!",
    allname,MB_OK MB_ICONINFORMATION);
    }
    CloseHandle(hd);
    }

  //改变文件属性

  if(m_PROPERTY){
    if(m_HIDE)
    stat =FILE_
    ATTRIBUTE_HIDDEN;
    else
  stat&=~FILE_
    ATTRIBUTE_HIDDEN;
    if(m_READ)
    stat =FILE_
    ATTRIBUTE_READONLY;

  else

    stat&=~FILE_
    ATTRIBUTE_READONLY;
    if(m_SAVE)
    stat =FILE_
    ATTRIBUTE_ARCHIVE;

  else

  stat&=~FILE_
    ATTRIBUTE_ARCHIVE;
    if(m_SYSTEM)
    stat =FILE_
    ATTRIBUTE_SYSTEM;

  else

  stat&=~FILE_
    ATTRIBUTE_SYSTEM;
  }

  //设置文件属性

  tt=SetFileAttributes(allname,stat);
    if(!tt){
    MessageBox("警告,文件信息出错!!",allname,
    MB_OK MB_
    ICONINFORMATION);
    continue;
  }

  //查找并修改当前目录

  下所有符合条件的文件

  if(stat&FILE_
    ATTRIBUTE_DIRECTORY
    && !bFlag){//m_DIRECTORY
    char temp[128];
    sprintf(temp,"%s%s\\%s",
    pathname,fileinfo.cFileName,filter);

  //递归改变该子目录下的文件

  ChangeTheProperty(temp,1);
    continue;
    }
    }while(FindNextFile( handle, &fileinfo ));
    FindClose(handle);
    return 1;
    }  

  ---- 3、在执行更改的按钮的BN_CLICKED消息处理器中加入以下代码,这段代码首先解析了输入的文件名全路径,并初始化了filter成员变量:

  UpdateData(TRUE);

    int num=m_FILENAME.GetLength();

    for(int i=num-1;i>=0;i--){
    if(m_FILENAME.GetAt(i)=='\\')
    break;
    }

    if(i!=-1){
    CString ss=m_FILENAME.Right( num-1-i );
    strcpy(filter,ss.GetBuffer(15) );
    ss.ReleaseBuffer();
    ChangeTheProperty
    ( m_FILENAME.GetBuffer(128)) ;
    m_FILENAME.ReleaseBuffer();
    }

  ---- 4、编译连接后,在文件名编辑框中输入要改变的文件的带通配符的全路径,设置文件的创建修改访问时间以及只读隐藏等属性,点击该按钮后执行选定的更改操作。

  ---- 三、本编码在NT4.0平台,用VC++6.0编译,效果良好,符合预期。

相关频道: eNews

您对本文或本站有任何意见,请在下方提交,谢谢!

投稿信箱:tougao@enet16.com