Data de criacao do arquivo

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Data de criacao do arquivo

Mensagem por JoséQuintas »

Itamar M. Lins Jr. escreveu:Procurou os comandos FTP ?
Pq neste caso precisa entrar e sair(dentro e fora) da concha(SHELL) FTP.
https://www.cs.colostate.edu/helpdocs/ftp.html
O comando ls deve resolver seu caso.
ls to list the names of the files in the current remote directory
Até fui confirmar a data do post do Itamar....
Faz 15 anos (QUINZE ANOS) que o Harbour faz isso, e o Itamar sugerindo complicações...

Em todo caso, no passado criei isto, que não uso mais.
Como não apaguei a anotação do fonte, não sei se precisa no 3.2.

Código: Selecionar todos



/*
CREATE CLASS MyTIPClientFTP INHERIT TIPClientFTP

   METHOD ListFiles( cFileSpec )

   ENDCLASS

METHOD ListFiles( cFileSpec ) CLASS MyTIPCLientFTP

   LOCAL aList, aFile, cEntry, aListFiles := {}
   LOCAL cYear, cMonth, cDay, cTime, cName, cSize, cAttrib, cList, nCont

   cList := ::list( cFileSpec )

   IF Empty( cList )
      RETURN aListFiles
   ENDIF

   aList := hb_ATokens( StrTran( cList, Chr( 13 ) ), Chr( 10 ) )

   FOR nCont = 1 TO Len( aList )
      cEntry := aList[ nCont ]    // 05-03-13  06:18PM              2115072 jpa.exe

      IF ! Empty( cEntry )
         aFile  := Array( 5 )
         cEntry := AllTrim( cEntry )

         cDay   := Substr( cEntry, 1, 2 )
         cMonth := Substr( cEntry, 4, 2 )
         cYear  := "20" + Substr( cEntry, 7, 2 )
         cEntry := AllTrim( Substr( cEntry, At( " ", cEntry ) ) )

         cTime := AllTrim( Substr( cEntry, 1, At( " ", cEntry ) ) )
         cEntry := AllTrim( Substr( cEntry, At( " ", cEntry ) ) )

         cSize  := AllTrim( Substr( cEntry, 1, At( " ", cEntry ) ) )
         cEntry := AllTrim( Substr( cEntry, At( " ", cEntry ) ) )

         cName := cEntry

         cAttrib := ""

         aFile[ F_NAME ] := cName
         aFile[ F_SIZE ] := Val( cSize )
         aFile[ F_ATTR ] := cAttrib
         aFile[ F_DATE ] := hb_SToD( cYear + cMonth + cDay )
         aFile[ F_TIME ] := cTime

         Aadd( aListFiles, aFile )

      ENDIF

   NEXT

   RETURN aListFiles
*/
Mas acho que é só pegar do 3.4, se precisar.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Data de criacao do arquivo

Mensagem por Itamar M. Lins Jr. »

Olá!
Primeiro -> Pensei que não tinha !
E não é FTP é HTTP que ele usa.
E no Harbour 3.2 tem a função ListFiles pronta. IIS(win) ou Linux para FTP

Código: Selecionar todos

/* Listing formats (from libcurl)
   https://github.com/curl/curl/blob/master/lib/ftplistparser.c
   Unix version 1: drwxr-xr-x 1 user01 ftp  512 Jan 29 23:32 prog
   Unix version 2: drwxr-xr-x 1 user01 ftp  512 Jan 29 1997  prog
   Unix version 3: drwxr-xr-x 1      1   1  512 Jan 29 23:32 prog
   Unix symlink  : lrwxr-xr-x 1 user01 ftp  512 Jan 29 23:32 prog -> prog2000
   DOS style/IIS : 01-29-97 11:32PM <DIR> prog
   DOS style/IIS : 01-29-97 11:32PM    512 prog
   DOS style/IIS : 01-29-2010 11:32PM <DIR> prog
 */

// Parse the :list() string into a hb_vfDirectory() compatible 2-dim array
METHOD ListFiles( cFileSpec ) CLASS TIPClientFTP

   LOCAL aMonth := { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }

   LOCAL aList, aFile, cEntry, nStart, nEnd
   LOCAL cYear, cMonth, cDay, cTime

   LOCAL cList := ::list( cFileSpec )

   IF Empty( cList )
      RETURN {}
   ENDIF

   aList := hb_ATokens( cList, .T. )

   FOR EACH cEntry IN aList DESCEND

      IF Empty( cEntry )
         hb_ADel( aList, cEntry:__enumIndex(), .T. )
      ELSE
         aFile  := Array( F_LEN + 3 )
         nStart := 1
         nEnd   := hb_At( " ", cEntry, nStart )

         // file permissions (attributes)
         aFile[ F_ATTR ] := SubStr( cEntry, nStart, nEnd - nStart )
         nStart          := nEnd

         IF Val( StrTran( aFile[ F_ATTR ], "-" ) ) == 0

            // continue with Unix format

            // # of links
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd               := hb_At( " ", cEntry, nStart )
            aFile[ F_LEN + 1 ] := Val( SubStr( cEntry, nStart, nEnd - nStart ) )
            nStart             := nEnd

            // owner name
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd               := hb_At( " ", cEntry, nStart )
            aFile[ F_LEN + 2 ] := SubStr( cEntry, nStart, nEnd - nStart )
            nStart             := nEnd

            // group name
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd               := hb_At( " ", cEntry, nStart )
            aFile[ F_LEN + 3 ] := SubStr( cEntry, nStart, nEnd - nStart )
            nStart             := nEnd

            // file size
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd            := hb_At( " ", cEntry, nStart )
            aFile[ F_SIZE ] := Val( SubStr( cEntry, nStart, nEnd - nStart ) )
            nStart          := nEnd

            // Month
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd          := hb_At( " ", cEntry, nStart )
            cMonth        := StrZero( hb_AScan( aMonth, SubStr( cEntry, nStart, nEnd - nStart ), , , .T. ), 2 )
            nStart        := nEnd

            // Day
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd          := hb_At( " ", cEntry, nStart )
            cDay          := SubStr( cEntry, nStart, nEnd - nStart )
            nStart        := nEnd

            // Year
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd          := hb_At( " ", cEntry, nStart )
            cYear         := SubStr( cEntry, nStart, nEnd - nStart )
            nStart        := nEnd

            IF ":" $ cYear
               cTime := cYear
               cYear := StrZero( Year( Date() ), 4 )
            ELSE
               cTime := ""
            ENDIF

            aFile[ F_DATE ] := hb_SToD( cYear + cMonth + cDay )
            aFile[ F_TIME ] := cTime

         ELSE

            // DOS style/IIS format

            aFile[ F_LEN + 1 ] := 0
            aFile[ F_LEN + 2 ] := aFile[ F_LEN + 3 ] := aFile[ F_ATTR ] := ""

            aFile[ F_DATE ] := hb_CToD( aFile[ F_ATTR ], "mm-dd-yy" )

            // # time
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd   := hb_At( " ", cEntry, nStart )
            cTime  := SubStr( cEntry, nStart, nEnd - nStart )
            nStart := nEnd

            aFile[ F_TIME ] := Left( TString( Secs( Left( cTime, 5 ) ) + iif( Right( cTime, 2 ) == "PM", 43200, 0 ) ), 5 )

            // file size
            DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
            ENDDO
            nEnd            := hb_At( " ", cEntry, nStart )
            aFile[ F_SIZE ] := Val( SubStr( cEntry, nStart, nEnd - nStart ) )
            nStart          := nEnd

         ENDIF

         // file name
         DO WHILE SubStr( cEntry, ++nStart, 1 ) == " "
         ENDDO

         aFile[ F_NAME ] := SubStr( cEntry, nStart )

         cEntry := aFile
      ENDIF
   NEXT

   RETURN aList
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Data de criacao do arquivo

Mensagem por Itamar M. Lins Jr. »

Olá!
Lendo o methodo ListFiles, mesmo assim, ainda não entendi como vai ler o diretório da URL.
Olhei esse comando aqui e parece que ele substitui o LS do FTP.

Código: Selecionar todos

METHOD LS( cSpec ) CLASS TIPClientFTP

   IF ::bUsePasv .AND. ! ::Pasv()
#if 0
      ::bUsePasv := .F.
#endif
      RETURN .F.
   ENDIF

   IF ! ::bUsePasv .AND. ! ::Port()
      RETURN .F.
   ENDIF

   ::inetSendAll( ::SocketCon, "NLST " + hb_defaultValue( cSpec, "" ) + ::cCRLF )

   RETURN hb_defaultValue( ::ReadAuxPort(), "" )
Dá um NLST ?
E tem o LIST também.

Código: Selecionar todos

METHOD List( cSpec ) CLASS TIPClientFTP

   LOCAL cStr

   IF ::bUsePasv .AND. ! ::Pasv()
#if 0
      ::bUsePasv := .F.
#endif
      RETURN NIL
   ENDIF
   IF ! ::bUsePasv .AND. ! ::Port()
      RETURN NIL
   ENDIF

   hb_default( @cSpec, "" )

   IF ! Empty( cSpec )
      cSpec := " " + cSpec
   ENDIF

   ::inetSendAll( ::SocketCon, "LIST" + cSpec + ::cCRLF )
   cStr := ::ReadAuxPort()
   ::bEof := .F.

   RETURN cStr 
Se der certo favor compartilhar para nós outros.

Via HTTP não achei nada de como listar arquivos do servidor.

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Data de criacao do arquivo

Mensagem por JoséQuintas »

Se não me engano, hb_vf* não tem limites.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Data de criacao do arquivo

Mensagem por alxsts »

Olá!

Não sei se o OP já resolveu isto mas, segue abaixo para constar:

Dentre as Funções hb_vf*, a única que exibe data e hora de arquivo é a hb_vfTimeGet(). A data e hora exibidas são referentes à última alteração e não a de criação, exatamente como faz o comando DIR. Estou falando de um ambiente local, não conheço ambiente em nuvem.

Para exibir a data de criação e várias outras informações de um arquivo, a única forma que encontrei foi usando a rotina da lib HbWin.

Código: Selecionar todos

PROCEDURE Main()

   FileProp( "C:\hb32\Test\HwGUI\Lixo\TesteCodeBlock.Prg" ) // Arquivo a pesquisar

   // FileProp( "C:\hb32\bin\harbour.exe" ) // Arquivo a pesquisar

RETURN

//------------------------------------------------------------------------------------------------------------------------------

PROCEDURE FileProp( cFile )

   // Exibir dados das propriedades de um arquivo 
   //
   // Compilar: HbMk2 Teste hbwin.hbc
   // Alexandre Santos - 13/Mar/2022

   LOCAL fso          // File System Object
   LOCAL f            // Dados do arquivo
   LOCAL aAttrib      // Lista de atributos
   LOCAL tsTimeStamp  // Lista de atributos

   aAttrib := { {     0, "Normal    " }, ;    // Arquivo normal. Nenhum atributos está definido.
                {     1, "ReadOnly  " }, ;    // Arquivo somente leitura. Atributo é leitura/gravação.
                {     2, "Oculto    " }, ;    // Arquivo oculto. Atributo é leitura/gravação.
                {     4, "System    " }, ;    // Arquivo do sistema. Atributo é leitura/gravação.
                {     8, "Volume    " }, ;    // Rótulo de volume da unidade de disco. O atributo é somente leitura.
                {    16, "Directory " }, ;    // Pasta ou diretório. O atributo é somente leitura.
                {    32, "Arquivar  " }, ;    // O arquivo foi alterado desde o último backup. Atributo é leitura/gravação.
                {  1024, "Alias	   " }, ;    // Link ou atalho. O atributo é somente leitura.
                {  2048, "Compactado" }  ;    // Arquivo compactado. O atributo é somente leitura.
              }
   CLS

   fso := win_OleCreateObject( "Scripting.FileSystemObject" )

   With Object f := fso:GetFile( cFile )
      QOut( "Arquivo ........... ", cFile )
      QOut()
      QOut( "Atributo .......... ", aAttrib[ hb_Ascan( aAttrib, { |a| a[1] == :attributes } ), 2 ] )  //Define ou retorna os atributos de um arquivo especificado.
      QOut( "Criado em ......... ", hb_TtoC( :dateCreated, "dd/mm/yyyy", "hh:mm:ss" ) )             // Retorna a data e a hora em que um arquivo especificado foi criado.
      QOut( "Ultima Modificacao. ", hb_TtoC( :dateLastModified, "dd/mm/yyyy", "hh:mm:ss" ) )        // Retorna a data e a hora em que um arquivo especificado foi modificado pela última vez.
      QOut( "Ultimo Acesso ..... ", hb_TtoC( :dateLastAccessed, "dd/mm/yyyy", "hh:mm:ss" ) )        // Retorna a data e a hora em que um arquivo especificado foi acessado pela última vez.
      QOut( "Drive ............. ", :drive )                                                        // Retorna a letra da unidade em que reside um arquivo ou pasta especificado.
      QOut( "Nome .............. ", :name )                                                         // Define ou retorna o nome de um arquivo especificado.
      QOut( "Diretorio Pai ..... ", :parentFolder:name )                                                 // Retorna o objeto folder do pai do arquivo especificado.
      QOut( "Pasta ............. ", :path )                                                         // Retorna o caminho de um arquivo especificado.
      QOut( "Nome Curto ........ ", :shortName )                                                    // Retorna o nome curto de um arquivo especificado (a convenção de nomes 8.3).
      QOut( "Pasta (curto) ..... ", :shortPath )                                                    // Retorna o caminho curto de um arquivo especificado (a convenção de nomes 8.3).
      QOut( "Tamanho em bytes .. ", :size )                                                         // Retorna o tamanho, em bytes, de um arquivo especificado.
      QOut( "Tipo .............. ", :type )                                                         // Retorna o tipo de arquivo especificado.
      QOut()
      hb_vfTimeGet( cFile , @tsTimeStamp  )
      QOut( "hb_vfTimeGet() .... ", hb_TtoC( tsTimeStamp, "dd/mm/yyyy", "hh:mm:ss" ) )
      QOut( "Tipo .............. ", :type )                                                         // Retorna o 
   End With

   f := NIL
   fso := NIL

RETURN
//------------------------------------------------------------------------------------------------------------------------------
Capturar.png
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Data de criacao do arquivo

Mensagem por JoséQuintas »

Pensando bem....

HTTP é atendido por páginas de internet, e eventualmente download.
Por acaso é recurso de HTTP fornecer tamanho?
Se não for, nem adianta procurar função pra isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Data de criacao do arquivo

Mensagem por Linguagemclipper »

Exatamente, José Quintas. Falo da data do arquivo no servidor.
Sua dica foi valiosa, conseguí verificar com as funções de FTP: TIpClientFtp()

Pensei que estivesse tudo ok, mas fui surpreendido: subí um arquivo para o servidor agora 21:51 dia 21/03/2022, mas o sistema baixou mais de uma vez o arquivo. Entrei no debug e constatei que a data do arquivo no servidor é 22/03/22... então vai sempre dizer que está desatualizado. Tentei configurar o timezone no servidor colocando a variável PHP date.timezone = America/Maceio, mas não funcionou.

Procurei alguma função do xHarbour que alterasse o timezone, mas não achei nada.

Como eu saio dessa?
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Data de criacao do arquivo

Mensagem por alxsts »

Olá!

Não sei se entendi bem: a data do servidor está em uma time zone diferente da máquina local? Quer alterar a data do arquivo no servidor ou a data do servidor?
Linguagemclipper escreveu:constatei que a data do arquivo no servidor é 22/03/22...
Se souber a time zone da data do servidor, é possível calcular a diferença. Tem algumas funções de time zone neste tópico.
Tem também a função

Código: Selecionar todos

hb_UTCOffset( [<tLocalTime>] ) ➜ nSeconds
returns the UTC offset as a signed number of seconds.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Data de criacao do arquivo

Mensagem por Linguagemclipper »

O servidor usa UTF 0 e a gente aqui do Brasil é -3. O suporte disse que não há como mudar o UTF do servidor, então meus arquivos sempre ficarão no UTC 0 (zero).
Eu comparo a data do manual.pdf local com a do servidor para ver se há um manual mais recente.
Se eu acabar de subir um manual novo, vai baixar e continuar dizendo que está desatualizado pelas próximas 3h, entende?
Acabei fazendo uma rotina para calcular a diferença, não sabia dessa função, não tinha conseguido achar nenhuma. Ainda tem o lag... Se tiver uma diferença de até 3min eu considero que é o lag de internet (tempo que levou o upload) e zero a diferença.
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Data de criacao do arquivo

Mensagem por alxsts »

Olá!

Consegue abrir e ler o PDF no servidor?

Poderia gerar uma linha dentro do PDF (talvez a última linha) onde constasse um número de versão e a data e hora de criação desta versão. Abrindo o PDF da máquina local, você teria os dados de versão do arquivo local. Abriria então o PDF do servidor, pegaria estes dados dele e faria a comparação...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Data de criacao do arquivo

Mensagem por JoséQuintas »

Talvez acrescentar data/hora do upload em arquivo separado, ou até um número de versão.
Podendo até usar uma base SQL pra isso.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Linguagemclipper
Usuário Nível 3
Usuário Nível 3
Mensagens: 240
Registrado em: 16 Abr 2016 17:33
Localização: Maceió/AL
Contato:

Data de criacao do arquivo

Mensagem por Linguagemclipper »

Eu faço isso no programa principal, o exe. Tenho um arquivo de texto que mostra a versão atual e as licenças em cada linha.
O incrível é que a função oFTP:listFiles() dá só a hora e minuto sem os segundos, tipo hh:mm.
Daí fica impossível comparar a data e hora local (hh:mm:ss) com a do servidor (hh:mm).
Cortei a hora local pra 5 dígitos também, hh:mm.

Código: Selecionar todos

// EQUIPARAR HORAS
hHELP1 := LEFT(hHELP1, LEN(hHELP2) ) // SE REMOTO HH:MM ENTÃO LOCAL HH:MM
Ainda assim a diferença SECS() entre uma hora e outra dá 1.58, não zera.
Daí eu coloco uma tolerância de 2min para igualar uma hora com a outra.

Código: Selecionar todos

		IF (nLAG/60) < 2 // TOLERÂNCIA DE LAG: 2min
			// ZERA A DIFERENÇA
			nSECS1 := nSECS2
		ENDIF
Usando xHarbour v1.2.3 Rev. 10264 + BCC 5.8, Elchs' LetoDBf, DBFCDX e SIBRA para imprimir relatórios.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Data de criacao do arquivo

Mensagem por JoséQuintas »

Por http já aconteceu de baixar um arquivo DA SEMANA PASSADA.
Não sei se era cache do servidor.
Por isso sempre usei arquivo separado pra checagem, e depois pelo MySQL pra ficar mais garantido ainda.
Inclusive testando o UPLOAD.

Com o chrome já tive problema do upload carregar arquivo antigo, ou download baixar arquivo antigo.
Quando digo chrome: com o chrome instalado, afetando o funcionamento do Windows.

Isso foi faz tempo, de lá pra cá deve ter melhorado tudo.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Data de criacao do arquivo

Mensagem por alxsts »

Olá!

Se cada documento tiver um identificador único e crescente identificando o número da versão, nem precisa comparar datas. Pode colocar este identificador concatenado ao nome de cada documento. O identificador pode ser até a data de geração do documento. Ex.: ManualSistemaV1978.PDF ou ManualSistemaV20220322125729.Pdf.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

Data de criacao do arquivo

Mensagem por Itamar M. Lins Jr. »

Olá!
Ex.: ManualSistemaV1978.PDF ou ManualSistemaV20220322125729.Pdf.
IMHO, Matou a questão!

Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Responder