Bagikan melalui


Mengambil dan Mengubah Atribut File

Aplikasi dapat mengambil atribut file dengan menggunakan fungsi GetFileAttributes atau GetFileAttributesEx . Fungsi CreateFile dan SetFileAttributes dapat mengatur banyak atribut. Namun, aplikasi tidak dapat mengatur semua atribut.

Contoh kode dalam topik ini menggunakan fungsi CopyFile untuk menyalin semua file teks (.txt) di direktori saat ini ke direktori baru file baca-saja. File di direktori baru diubah menjadi baca saja, jika perlu.

Aplikasi membuat direktori yang ditentukan sebagai parameter dengan menggunakan fungsi CreateDirectory . Direktori belum ada.

Aplikasi mencari direktori saat ini untuk semua file teks dengan menggunakan fungsi FindFirstFile dan FindNextFile . Setiap file teks disalin ke direktori \TextRO. Setelah file disalin, fungsi GetFileAttributes menentukan apakah file hanya dibaca atau tidak. Jika file tidak dibaca saja, aplikasi mengubah direktori menjadi \TextRO dan mengonversi file yang disalin untuk dibaca saja dengan menggunakan fungsi SetFileAttributes .

Setelah semua file teks di direktori saat ini disalin, aplikasi menutup handel pencarian dengan menggunakan fungsi 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);
}

Konstanta Atribut File

Nama File, Jalur, dan Namespace