Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Ett program kan hämta filattributen med hjälp av funktionen GetFileAttributes eller GetFileAttributesEx. Funktionerna CreateFile och SetFileAttributes kan ange många av attributen. Program kan dock inte ange alla attribut.
Kodexemplet i det här avsnittet använder funktionen CopyFile för att kopiera alla textfiler (.txt) i den aktuella katalogen till en ny katalog med skrivskyddade filer. Filer i den nya katalogen görs skrivskyddade vid behov.
Programmet skapar katalogen som anges som en parameter med hjälp av funktionen CreateDirectory. Katalogen får inte redan finnas.
Programmet söker i den aktuella katalogen efter alla textfiler med hjälp av funktionerna FindFirstFile och FindNextFile. Varje textfil kopieras till katalogen \TextRO. När en fil har kopierats avgör funktionen GetFileAttributes om en fil är skrivskyddad eller inte. Om filen inte är skrivskyddad ändrar programmet katalog till \TextRO och gör den kopierade filen skrivskyddad med hjälp av funktionen SetFileAttributes.
När alla textfiler i den aktuella katalogen har kopierats stänger programmet sökhandtaget med hjälp av funktionen 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);
}
Relaterade ämnen