应用程序能够通过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函数来关闭搜寻句柄。