Unit mi.rtl.files
Descrição
A Unit
mi.rtl.files
contém as funções Wrapper para os sistemas operacionais Win32 Win64 e Linux x86_64 reconhecidos pelo free pascal.OBJETIVO:
Evitar de alterar todos os códigos escritos para a plataforma windows e por isso mantenho o mesmo comportamento do windows.
VERSÃO:
Alpha - 1.0.0
NOTA:
Veja o link de como escrever código portátil em relação à arquitetura do processador?;
Só devo usar units syscalls do Linux ou Windows caso não encontre a mesma pronta nos projetos lazarus ou Free Pascal.
REFERÊNCIA
[Reference for unit 'System': procedures and functions](https://www.freepascal.org/docs-html/rtl/system/index-5.html)
CÓDIGO FONTE:
HISTÓRICO
Criado por: Paulo Sérgio da Silva Pacheco e-mail: paulosspacheco@yahoo.com.br
2021-10-21 08:00 - Data em que essa unit
mi.rtl.files
foi criada.2021-11-02 15:42 - Escolha do projeto pasdoc para criar documento do pacote mi.rtl.
2021-11-04 08:37 - Implementação da função SysFileOpen()
2021-11-04 14:00 - Implementação da função SysSetResult()
2021-11-04 14:30 - Implementação da função SetFileMode()
2021-11-04 15:30 - Documentar a unit
mi.rtl.files
e organizar sessão de constantes, variáveis e funções.2021-11-04 21:00 - Criar exemplo de uso das funções SysFileOpen e SysFileClose.
2021-11-05 21:30 - Revisar documentação desta nas funções: SysSetResult, ...
2021-11-12 08:56 - Procurar bug da função SysFileOpen na máquina windows.
Eureca. Resolvi o problema da função SysFileOpen.
O problema da função SysFileOpen estava na forma como no windows a função SysUtils.fileOpen trabalha.
Caso ocorra um erro a função SysUtils.fileOpen retorna high(THandle).
Para corrigir precisei modificar a função SysSetResult.
2021-11-12 16:56 - Documentar a unit
mi.rtl.files
e criar a função CopyFile().2021-11-12 18:05 - Criar a função SysFileSetSize para truncar o arquivo e documenta-la.
2021-11-13
Criado a class TFiles herdade de TConsts com propósito em encapsular as funções de acesso ao sistema operacional.
Criar método TFiles.ErrorMessage();
Criar método TFiles.SetLastError();
Criar método TFiles.SetResult()
Criar método TFiles.CopyFile()
Criar método TFiles.SetFileMode()
Criar método TFiles.FileOpen(5 parametro)
Criar método TFiles.FileOpen(3 parâmetro)
Criar método TFiles.FileClose()
Criar método TFiles.FileTruncate()
Criar método TFiles.FileCreate()
2021-11-15
O método TFiles.FileCreate() não está obedecendo o mapa de bits FileMode() checar o porque:
Solução:
A função SysUtils.FileCreate precisa do fmCreate na criação do arquivo.
Após criar o arquivo o mesmo deve ser fechado e aberto novamente com o mapa de bits mode e shareMode passado no parâmetro.
Criar método TFiles.FileSeek()
Criar método TFiles.FileRead()
2021-11-16
O método SysFileSeek não gerar erro se o ponteiro do arquivo for inválido.
Para contornar devo fazer a crítica se o ponteiro é maior que zero e menor que fileSize.
Essa solução não atende porque não fileSeek não tem o nome do arquivo.
Entendendo porque SysUtils.FileSeek não dar erro quando se tenta posicionar além do fim do arquivo:
No linux lseek() permite que o deslocamento do arquivo seja definido além do final do arquivo (mas isso não altera o tamanho do arquivo). Se os dados forem posteriormente escrito neste ponto, leituras subsequentes dos dados no gap (um "buraco") retorna bytes nulos ('\ 0') até que os dados sejam realmente escrito na lacuna.
Criar método TFiles.FileSize()
Criar exemplo de uso do método TFiles.FileSize()
Criar exemplo de uso do método TFiles.FileSeek()
2021-11-17
08:30 a 10:38 - Criar exemplo de uso do método TFiles.FileRead()
11:36 a 11:48 - Criar método TFiles.FileWrite()
11:50 a 12:21 - Criar exemplo de uso do método TFiles.FileWrite() - Falta testar.
14:15 a 15:23 - Testar o exemplo de uso da função TFiles.FileWrite. ok.
2021-11-21
10:30 a 11:10
Criar classe método - TFiles.FileExists()
Criar classe método - TFiles.DirectoryExists()
2021-11-22
10:00 a 10:06 - Criar classe método : TFiles.CreateDir()
10:29 a 11:10 - Criar classe método : TFiles.SysGetDriveType(aPath : AnsiString): TDriveType;
11:11 a 12:02 - Criar classe método : **TFiles.DuplicateHandle(hSourceHandle: LongInt;Var lpTargeTHandle: Longint) : Longint);
14:10 a 15:16 - Criar classe método : TFiles.FileFlushBuffers(Handle: THandle): Longint;
15:44 a 17:32 - Criar classe método : LockFile(_Handle:THandle; _LockStart, _LockLength: Int64): LongInt;
Não encontrei no linux o equivalente ao Windows.LockFile
15:44 a 17:32 - Criar classe método : TFiles.UnLockFile(_Handle:THandle; _LockStart, _LockLength: Int64): LongInt;
Não encontrei no linux o equivalente ao Windows.unLockFile
2021-12-01
11:42 a ??:?? : Implementar a função TFiles.Is_TFileOpen
2021-12-02
20:00 a 22:15 : Implementei a classe TFiles.TStrError
2021-12-30
15:30 a 16:10 : Criar método TFiles.GetTempFileName
2022-01-11
17:10 - Criar método TFiles.ShellExecute
2022-04-22
15:46 - Criar método TFiles.AppVersionInfo
2023-07-18
16:00 - Criar a classe método FindFilesAll
2023-07-27
08:25 - Em mi.rtl.files.findFileAll adicionar o parâmetro apath.
Uses
- Classes
- dos
- SysUtils
- LazFileUtils
- crt
- FileUtil
- mi.rtl.libBinRes
- mi.rtl.types
- mi.rtl.Consts
- mi.rtl.Consts.StrError
Visão Geral
Classes, Interfaces, Objetos e Registros
Nome | Descrição |
---|---|
Classe TFiles |
Gerado por PasDoc 0.16.0.