Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um aplicativo pode recuperar os atributos de arquivo usando o GetFileAttributes ou função GetFileAttributesEx. As funções CreateFile e SetFileAttributes podem definir muitos dos atributos. No entanto, os aplicativos não podem definir todos os atributos.
O exemplo de código neste tópico usa a função CopyFile para copiar todos os arquivos de texto (.txt) no diretório atual para um novo diretório de arquivos somente leitura. Os arquivos no novo diretório são alterados para somente leitura, se necessário.
O aplicativo cria o diretório especificado como um parâmetro usando a função CreateDirectory. O diretório já não deve existir.
O aplicativo pesquisa o diretório atual para encontrar todos os arquivos de texto utilizando as funções FindFirstFile e FindNextFile. Cada arquivo de texto é copiado para o diretório \TextRO. Depois que um arquivo é copiado, a função GetFileAttributes determina se um arquivo é ou não somente leitura. Se o arquivo não for somente leitura, o aplicativo alterará os diretórios para \TextRO e converterá o arquivo copiado para somente leitura usando a funçãoSetFileAttributes.
Depois que todos os arquivos de texto no diretório atual são copiados, o aplicativo fecha o identificador de pesquisa usando a função 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);
}
Tópicos relacionados