Compartilhar via


CreateFile Overview

Windows Mobile Not SupportedWindows Embedded CE Supported

9/8/2008

Use a função CreateFile para aberto ou criar arquivos e para get um identificador a ser usado com um porta COM, armazenamento volume, disco unidade, partição unidade, serviço ou console.

Usando CreateFile com arquivos

CreateFile Pode criar um novo arquivo ou aberto um arquivo existente. Você deve especificar o nome arquivo, instruções de criação e outros atributos. Quando um aplicativo cria um novo arquivo, o OS adiciona-lo para o Diretório especificado.

Quando um aplicativo usa CreateFile, ele deve usar o dwDesiredAccess parâmetro para especificar o modo de acesso: Se ele lê a partir de arquivo, grava o arquivo, ou ambos. O aplicativo também deve especificar qual ação ser tomada se o arquivo já existe. De exemplo, um aplicativo pode chamar CreateFile Com CREATE_ALWAYS para criar o arquivo se ele ainda não existir e substituir o arquivo se ele existir.

Em adição às características descritas na dwDesiredAccess parâmetro, CreateFile Inclui um ponteiro para uma estrutura SECURITY_ATTRIBUTES, se ela existir. A estrutura SECURITY_ATTRIBUTES fornecida é aplicada somente se o arquivo ainda não existir no tempo de criação. Se mesmo dwCreationDisposition é definido como CREATE_ALWAYS, quais atributos limpa e tamanho, o descritor de segurança existente permanece o mesmo se o arquivo já existir. Um aplicativo não é possível criar um arquivo com um descritor de segurança que proíbe a modo de acesso solicitada.

Quando um processo tenta aberto um arquivo que já foi aberto no compartilhamento modo, o sistema compara a acessar solicitada e compartilhamento modos aos especificados quando o arquivo foi aberto. Se você especificar um modo de acesso que está em conflito com o modo de compartilhamento especificado no aberto anterior chamar, CreateFile Falha com uma violação de compartilhamento, ERROR_SHARING_VIOLATION. Se você especificar um modo de compartilhamento que está em conflito com o modo de acesso especificado no aberto anterior chamar, CreateFile Falha com uma violação de compartilhamento.

Ao criar um novo arquivo, CreateFile Executa a seguinte ações:

  • Limpa os atributos arquivo existente (CREATE_ALWAYS com apenas uma arquivo existente).
  • Combina o arquivo atributos e sinalizadores especificados por dwFlagsAndAttributes Com FILE_ATTRIBUTE_ARCHIVE.
  • Define o comprimento arquivo para zero.

Ao abrir um arquivo existente, CreateFile Executa a seguinte ações:

  • Combina os sinalizadores arquivo (FILE_FLAG_) * especificados por dwFlagsAndAttributes com atributos arquivo existente. CreateFile ignora os atributos arquivo (FILE_ATTRIBUTE_) * especificados por dwFlagsAndAttributes.
  • Define o comprimento arquivo de acordo com o valor de dwCreationDisposition.
  • Ignora a lpSecurityDescriptor membro da estrutura de SECURITY_ATTRIBUTES. Os outros membros estrutura são usados, de exemplo, bInheritHandle Indica se a identificador de arquivo pode ser herdada.

O OS atribui um identificador exclusivo, chamado de identificador de arquivo, para cada arquivo que está aberto ou criado. Um aplicativo pode usar o identificador de arquivo em funções que ler, gravar e descreva o arquivo. É válido até que o arquivo é fechado. Quando um aplicativo é iniciado, ele herda aberto todos os identificadores arquivo a partir de processo que iniciada, se os identificadores são herdadas.

Um aplicativo deve verificar a valor de retorno de CreateFile Antes de tentar usar o identificador para acessar o arquivo. Se um erro ocorrer, o aplicativo pode usar o GetLastError função para informações de erro estendidas get.

O seguinte práticas irão ajudar a tornar melhor uso de CreateFile:

  • Nomeação de armazenamento máximo de arquivos
    Para armazenar o número máximo de arquivos no armazenamento cartão PC dispositivos, nomes arquivo limite para maiúscula oito caracteres e extensões arquivo para maiúscula três caracteres. Não use caracteres não-OEM em nomes arquivo. Nomes de arquivo que não estão em conformidade com esses limites exigem físico more than uma entrada Diretório em um cartão PC.
  • A compactação
    Para evitar um arquivo de sendo compactados, use o sinalizador FILE_FLAG_RANDOM_ACCESS no sistema de arquivos de memória RAM. Isso coloca os arquivos em armazenar o objeto e impede que um arquivo que está sendo compactado. Se desempenho for um emitir, isso pode ser a solução correta. Ler e gravar operações para um arquivo compactado são mais lenta do que ler e gravar operações em um arquivo descompactado.
  • O cache
    Alças de volume podem ser abertas como não-armazenada em cache a vontade do sistema de arquivos, mesmo quando a opção non-cached não é especificada com CreateFile. Você pode assumir que todos os Microsoft arquivo sistemas aberto volume trata como não-armazenada em cache. As restrições no E/S non-cached para arquivos também aplicar aos volumes.
    Um sistema de arquivos podem exigir alinhamento reserva, mesmo se a dados for não armazenada em cache. No entanto, se a opção non-cached for especificada quando abrir um volume, alinhamento reserva será aplicada, independentemente do sistema de arquivos no volume. Todos os sistemas arquivo devem aberto volume trata como não-armazenada em cache e siga as restrições E/S não armazenada em cache.
    CreateFile só deve ser usado em um identificador barramento $ privilegiado. Para obter mais informações, consulte Device Manager Security.
  • Acessando pastas diferente \Windows
    Para acessar um arquivo em um Diretório Other Than \Windows ou Diretório o raiz, fornecer o caminho absoluto para o arquivo. O OS não suporte a atual Diretório. Se um caminho para um arquivo não for fornecido juntamente com nome de arquivo, o OS procura o arquivo no Diretório \Windows, as well as na raiz da sistema de arquivos. Em alguns casos, a função GetModuleFileName pode fornecer o diretório de trabalho do atualmente execução arquivo executável.

Usando CreateFile com outros elementos

Você pode usar CreateFile Para um identificador a ser usado com um porta COM, get disco unidade, partição unidade ou console.

  • Portas COM
    CreateFile Pode criar um identificador para um porta COM. Pela configuração de dwCreationDisposition parâmetro para OPEN_EXISTING, Read-only, Write-only, ou ler/acesso de gravação pode ser especificado.
  • Unidade de disco ou partição unidade
    Você pode usar CreateFile Para aberto unidade uma disco ou uma partição na unidade disco. A função retorna um identificador para o dispositivo disco. Esse identificador pode ser usado com a função DeviceIoControl.
    A seguinte lista mostra os requisitos que devem ser atendidos para tal um chamar seja bem-sucedida:
    • O chamador deve ter privilégios administrativo para a operação seja bem-sucedida em uma unidade disco rígido.
    • O lpFileName seqüência de caracteres devem ser da forma DSKx: Para aberto a disco rígido x. Disco rígido iniciar números em 1. De exemplo, DSK2: Obtém um identificador para o segundo físico unidade sobre o computador.
    • O dwCreationDisposition parâmetro deve ser definido como OPEN_EXISTING.
    • Ao abrir um disco ou uma partição em um disco rígido, definir o sinalizador FILE_SHARE_WRITE na dwShareMode parâmetro.
  • Consoles
    Se estiver presente na imagem de OS Console.dll, um aplicativo poderá usar a direcionar console Nome, CONn:, para aberto o console com CreateFile, se ele tiver sido registrado anteriormente. O n é um número entre zero e 9.

See Also

Concepts

Creating, Deleting, and Maintaining Files
Creating and Opening a File or Directory