应用程序能够通过GetFileAttributes和GetFileAttributesEx函数来获取文件属性。CreateFile和SetFileAttributes函数能够设置大部分文件属性。然而,应用程序不能设置所有的属性。 在此用一个示例来说明问题,示例如下: #include <windows.h> #include <stdio.h>
void main() { WIN32_FIND_DATA FileData; HANDLE hSearch; DWORD dwAttrs; TCHAR szDirPath[] = TEXT("c:\\TextRO\\"); TCHAR szNewPath[MAX_PATH]; BOOL fFinished = FALSE; // 创建新目录 if (!CreateDirectory(szDirPath, NULL)) //新目录使用默认安全属性 { printf("Could not create new directory.\n"); return; } // 在当前目录开始寻找text文件 hSearch = FindFirstFile(TEXT("*.txt"), &FileData); if (hSearch == INVALID_HANDLE_VALUE) { printf("No text files found.\n"); return; } // 复制.TXT 文件到新目录,并改为只读属性
while (!fFinished) { lstrcpy(szNewPath, szDirPath); lstrcat(szNewPath, FileData.cFileName); //新目录路径名加文件名 if (CopyFile(FileData.cFileName, szNewPath, FALSE)) { dwAttrs = GetFileAttributes(FileData.cFileName); if( GetLastError() != 0 ) 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) { printf("Copied all text files.\n"); fFinished = TRUE; } else { printf("Could not find next file.\n"); return; } } } // 关闭搜寻句柄hSearch FindClose(hSearch); }
示例中使用CopyFile函数将一个目录中所有文本文件复制到一个新的只读文件的目录中,新目录叫\TextRO。如有必要,要将新目录中的文件属性改为只读。应用程序使用CreateDirectory函数来创建新目录。 应用程序使用FindFirstFile和FindNextFile函数在当前目录中寻找文本文件。每个文本文件均被复制到新目录\TextRO 中。文件被复制后,使用GetFileAttributes函数来判定文件是否是只读属性。如果文件不是只读属性,应用程序将使用 SetFileAttributes 函数来改变文件属性。 最后必须使用FindClose函数来关闭搜寻句柄。 
|