Partilhar via


Recuperando e alterando atributos de arquivo

Um aplicativo pode recuperar os atributos de arquivo usando o GetFileAttributes ou função GetFileAttributesEx. As funções CreateFile e SetFileAttributes podem definir muitos dos atributos. No entanto, os aplicativos não podem definir todos os atributos.

O exemplo de código neste tópico usa a função CopyFile para copiar todos os arquivos de texto (.txt) no diretório atual para um novo diretório de arquivos somente leitura. Os arquivos no novo diretório são alterados para somente leitura, se necessário.

O aplicativo cria o diretório especificado como um parâmetro usando a função CreateDirectory. O diretório já não deve existir.

O aplicativo pesquisa o diretório atual para encontrar todos os arquivos de texto utilizando as funções FindFirstFile e FindNextFile. Cada arquivo de texto é copiado para o diretório \TextRO. Depois que um arquivo é copiado, a função GetFileAttributes determina se um arquivo é ou não somente leitura. Se o arquivo não for somente leitura, o aplicativo alterará os diretórios para \TextRO e converterá o arquivo copiado para somente leitura usando a funçãoSetFileAttributes.

Depois que todos os arquivos de texto no diretório atual são copiados, o aplicativo fecha o identificador de pesquisa usando a função FindClose.

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <strsafe.h>

void _tmain(int argc, TCHAR* argv[])
{
   WIN32_FIND_DATA FileData;
   HANDLE          hSearch;
   DWORD           dwAttrs;
   TCHAR           szNewPath[MAX_PATH];   
 
   BOOL            fFinished = FALSE; 

   if(argc != 2)
   {
      _tprintf(TEXT("Usage: %s <dir>\n"), argv[0]);
      return;
   }
 
// Create a new directory. 
 
   if (!CreateDirectory(argv[1], NULL)) 
   { 
      printf("CreateDirectory failed (%d)\n", GetLastError()); 
      return;
   } 
 
// Start searching for text files in the current directory. 
 
   hSearch = FindFirstFile(TEXT("*.txt"), &FileData); 
   if (hSearch == INVALID_HANDLE_VALUE) 
   { 
      printf("No text files found.\n"); 
      return;
   } 
 
// Copy each .TXT file to the new directory 
// and change it to read only, if not already. 
 
   while (!fFinished) 
   { 
      StringCchPrintf(szNewPath, sizeof(szNewPath)/sizeof(szNewPath[0]), TEXT("%s\\%s"), argv[1], FileData.cFileName);

      if (CopyFile(FileData.cFileName, szNewPath, FALSE))
      { 
         dwAttrs = GetFileAttributes(FileData.cFileName); 
         if (dwAttrs==INVALID_FILE_ATTRIBUTES) return; 

         if (!(dwAttrs & FILE_ATTRIBUTE_READONLY)) 
         { 
            SetFileAttributes(szNewPath, 
                dwAttrs | FILE_ATTRIBUTE_READONLY); 
         } 
      } 
      else 
      { 
         printf("Could not copy file.\n"); 
         return;
      } 
 
      if (!FindNextFile(hSearch, &FileData)) 
      {
         if (GetLastError() == ERROR_NO_MORE_FILES) 
         { 
            _tprintf(TEXT("Copied *.txt to %s\n"), argv[1]); 
            fFinished = TRUE; 
         } 
         else 
         { 
            printf("Could not find next file.\n"); 
            return;
         } 
      }
   } 
 
// Close the search handle. 
 
   FindClose(hSearch);
}

Constantes de Atributo de Arquivo

Nomes de Ficheiros, Caminhos e Namespaces