Dosya Özniteliklerini Alma ve Değiştirme

Bir uygulama, GetFileAttributesveya GetFileAttributesExişlevinikullanarak dosya özniteliklerini alabilir. CreateFile ve SetFileAttributes işlevleri özniteliklerin çoğunu ayarlayabilir. Ancak, uygulamalar tüm öznitelikleri ayarlayamaz.

Bu konudaki kod örneği, geçerli dizindeki tüm metin dosyalarını (.txt) yeni bir salt okunur dosya dizinine kopyalamak için CopyFile işlevini kullanır. Gerekirse, yeni dizindeki dosyalar salt okunur olarak değiştirilir.

Uygulama, CreateDirectory işlevini kullanarak parametre olarak belirtilen dizini oluşturur. Dizin hali hazırda mevcut olmamalıdır.

Uygulama, FindFirstFile ve FindNextFileişlevlerinikullanarak geçerli dizinde tüm metin dosyalarını arar. Her metin dosyası \TextRO dizinine kopyalanır. Bir dosya kopyalandıktan sonra, GetFileAttributes işlevi bir dosyanın salt okunur olup olmadığını belirler. Dosya salt okunur değilse, uygulama dizinleri \TextRO olarak değiştirir ve SetFileAttributes işlevini kullanarak kopyalanan dosyayı salt okunur olarak dönüştürür.

Geçerli dizindeki tüm metin dosyaları kopyalandıktan sonra uygulama, FindClose işlevini kullanarak arama tutamacını kapatır.

#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);
}

Dosya Öznitelik Sabitleri

Dosya Adlarını, Yolları ve Ad Alanlarını