Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Aplikace může načíst atributy souboru pomocí funkce GetFileAttributes nebo GetFileAttributesEx. Funkce CreateFile a SetFileAttributes mohou nastavit mnoho atributů. Aplikace však nemohou nastavit všechny atributy.
Příklad kódu v tomto tématu používá funkci CopyFile ke zkopírování všech textových souborů (.txt) v aktuálním adresáři do nového adresáře souborů jen pro čtení. Soubory v novém adresáři se v případě potřeby změní na jen pro čtení.
Aplikace vytvoří adresář zadaný jako parametr pomocí funkce CreateDirectory. Adresář již nesmí existovat.
Aplikace prohledá aktuální adresář pro všechny textové soubory pomocí funkce FindFirstFile a FindNextFile. Každý textový soubor se zkopíruje do adresáře \TextRO. Po zkopírování souboru funkce GetFileAttributes určuje, zda je soubor jen pro čtení. Pokud soubor není jen pro čtení, aplikace změní adresáře na \TextRO a převede zkopírovaný soubor jen pro čtení pomocí funkce SetFileAttributes.
Jakmile jsou všechny textové soubory v aktuálním adresáři zkopírovány, aplikace zavře vyhledávací popisovač pomocí funkce 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);
}
Související témata