Boa tarde.
Testei seu código substituindo as variáveis utilizadas inferindo o tipo pela descrição que você passou. Pela natureza do problema apontado consegui simular o problema tentando utilizar um caminho de arquivo inválido, ou seja, usar um arquivo apontando para uma pasta que não existe retorna o erro "invalid file name". Apenas para avaliar melhor o problema eu coloquei o seguinte código para validar se o caminho do arquivo é válido:
if not DirectoryExists(ExtractFilePath(arquivo)) then
raise Exception.Create('Caminho do arquivo não existe');
As funções utilizadas estão na unit SysUtils, portanto precisa ser adicionada a cláusula uses. Você pode adicionar esse código logo no início da procedure gravacao para verificar se o problema é realmente de um caminho inválido.
Se não resolver o problema seria interessante que você postasse um código mínimo que possa ser copiado / colado e executado. Nesse caso poderia ser apenas algo que permitisse que a procedure gravacao pudesse ser executada sem a necessidade de completarmos com as peças que faltam. Dessa forma é possível obter respostas bem mais precisas para o problema apontado.