차근차근/C

파일 속성을 검색 및 변경

예쁜꽃이피었으면 2014. 10. 22. 16:17


http://msdn.microsoft.com/ko-kr/library/windows/desktop/aa365522(v=vs.85).aspx


Retrieving and Changing File Attributes

An application can retrieve the file attributes by using the GetFileAttributes or GetFileAttributesEx function. TheCreateFile and SetFileAttributes functions can set many of the attributes. However, applications cannot set all attributes.

The code example in this topic uses the CopyFile function to copy all text files (.txt) in the current directory to a new directory of read-only files. Files in the new directory are changed to read only, if necessary.

The application creates the directory specified as a parameter by using the CreateDirectory function. The directory must not exist already.

The application searches the current directory for all text files by using the FindFirstFile and FindNextFilefunctions. Each text file is copied to the \TextRO directory. After a file is copied, the GetFileAttributes function determines whether or not a file is read only. If the file is not read only, the application changes directories to \TextRO and converts the copied file to read only by using the SetFileAttributes function.

After all text files in the current directory are copied, the application closes the search handle by using theFindClose function.

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



반응형

'차근차근 > C' 카테고리의 다른 글

HANDLE  (0) 2014.10.22
WIN32_FIND_DATA 구조체  (0) 2014.10.22
지정한 경로에 존재하는 폴더와 파일목록을 얻는 방법  (0) 2014.10.22
재귀호출,디렉토리검색  (0) 2014.10.22
재귀호출,디렉토리검색  (0) 2014.10.22