Gerenciador de Arquivos em Harbour

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

Moderador: Moderadores

Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Gerenciador de Arquivos em Harbour

Mensagem por Jorge Luiz »

Olá!
Estou com dificuldades no Gerenciador de Arquivos nas linhas:

Código: Selecionar todos

			// =================================
			// Estou sentindo dificuldade aqui!
			// =================================	
			CLS
			dir := CurDir()
			? "Current Directory: " + dir
			? "cd " + "\"+dir
			INKEY(0)
			RUN("cd " + "\"+dir)
			CANCEL
			// =================================

Para quem desejar o código fonte está abaixo:

Código: Selecionar todos

#include "directry.ch"
TELA()

DECLARE ARQUIVOS := {}, NOMES := {}, ARQ := {}, oFile, CONT := .T., ASP:=0
DO WHILE .T.
	CONT = .T.
	DO WHILE CONT
		NOMES := {}
		ARQ := {}
		@ 2,1 CLEAR TO MAXROW()-2-4,19
		@ 2,22 CLEAR TO MAXROW()-2-4,MAXCOL()-2
		ARQUIVOS := DIRECTORY("*.*", "D")
		AADD(NOMES, "..")
		AADD(NOMES, "/" )
	   	FOR EACH oFile IN ARQUIVOS
	      		DO CASE
	      		CASE oFile[ F_NAME ] == "." .OR. oFile[ F_NAME ] == ".."
	      		CASE oFile[ F_NAME ] == "Program Files"
	         		AADD(NOMES, oFile[ F_NAME ])
	      		CASE oFile[ F_NAME ] == "Program Files (x86)"
	         		AADD(NOMES, oFile[ F_NAME ])
	      		CASE oFile[ F_NAME ] == "Users"
	         		AADD(NOMES, oFile[ F_NAME ])
	      		CASE oFile[ F_ATTR ] == "D"
	         		AADD(NOMES, oFile[ F_NAME ])
	      		OTHERWISE
	         		AAdd( ARQ, oFile[ F_NAME ] )
	      		ENDCASE
	   	NEXT
		FOR I = 1 TO MAXROW()-1-6
			IF I <= LEN(ARQ)
				@ I+1, 22 SAY ARQ[I]
 			ENDIF
		NEXT
		ESCOLHA := ACHOICE( 2, 1, MAXROW()-2-4, 19, NOMES)
		MENU()
		ASP = LASTKEY()
		IF ESCOLHA != 0
			DirChange(NOMES[ESCOLHA])
		ENDIF
		IF ASP == 4
			CONT = .F.
		ELSEIF ASP == 19
			CONT = .F.
		ENDIF
	ENDDO
	@ 2,22 CLEAR TO MAXROW()-2-4,MAXCOL()-2
		FOR I = 1 TO MAXROW()-1-6
			IF I <= LEN(NOMES)
				@ I+1, 1 SAY SUBSTR(NOMES[I],0,19)
 			ENDIF
		NEXT
	ESCOLHA := ACHOICE( 2, 22, MAXROW()-2-4, MAXCOL()-1, ARQ)
	MENU()
	IF ESCOLHA != 0
		RUN(ARQ[ESCOLHA])
	ENDIF
	NOMES := {}
	@ 2,22 CLEAR TO MAXROW()-2-4,MAXCOL()-2
ENDDO

FUNCTION MENU()
	LOCAL TESTE, ASP:=0
	TESTE = LASTKEY()
	IF TESTE == 27 // TECLA EXC
		@ MAXROW()-16,7 TO MAXROW()-0,23 DOUBLE
		@ MAXROW()-15,8  PROMPT "Start          "
		@ MAXROW()-14,8  PROMPT "Path           "
		@ MAXROW()-13,8  PROMPT "Driver         "
		@ MAXROW()-12,8  PROMPT "Open with      "
		@ MAXROW()-11,8  PROMPT "Search         "
		@ MAXROW()-10,8  PROMPT "Cut Ctrl + X   "
		@ MAXROW()-09,8  PROMPT "Copy Ctrl + C  "
		@ MAXROW()-08,8  PROMPT "Paste Ctrl + V "
		@ MAXROW()-07,8  PROMPT "Delete DELETE  "
		@ MAXROW()-06,8 PROMPT "Rename         "
		@ MAXROW()-05,8 PROMPT "New Folder     "
		@ MAXROW()-04,8 PROMPT "Compact        "
		@ MAXROW()-03,8 PROMPT "Order by" + chr(16) + "      "
		@ MAXROW()-02,8 PROMPT "About" + chr(16) + "         "
		@ MAXROW()-01,8 PROMPT "Exit           "
		MENU TO OPC

		ASP = LASTKEY()
		IF ASP == 27
			// =================================
			// Estou sentindo dificuldade aqui!
			// =================================	
			CLS
			dir := CurDir()
			? "Current Directory: " + dir
			? "cd " + "\"+dir
			INKEY(0)
			RUN("cd " + "\"+dir)
			CANCEL
			// =================================
		ENDIF

		DO CASE
		CASE OPC == 13
			@ MAXROW()-05,14 TO MAXROW()-0,25 DOUBLE
			@ MAXROW()-04,15 PROMPT "Name      "
			@ MAXROW()-03,15 PROMPT "Type      "
			@ MAXROW()-02,15 PROMPT "Date      "
			@ MAXROW()-01,15 PROMPT "Size      "
			MENU TO OPCx
		CASE OPC == 14
			@ 09,((MAXCOL()-30)/2)-1 TO 15,((MAXCOL()-30)/2)+30 DOUBLE
			@ 10,(MAXCOL()-30)/2 say "Name: Jorge Luiz Gouveia Sousa"
			@ 11,(MAXCOL()-30)/2 say "WhatsApp: +55 86 99460-2968   "
			@ 12,(MAXCOL()-30)/2 say "E-mail: jas5868aa@gmail.com   "
			@ 13,(MAXCOL()-30)/2 say "Site: www.ouka.com.br         "
			@ 14,(MAXCOL()-30)/2 say "Blog: jorgeia.blogspot.com    "
			INKEY(0)
		CASE OPC == 15
			CLS
			RUN("cd " + CURDIR())
			CANCEL
		ENDCASE
	ENDIF

	TELA()
RETURN NIL

FUNCTION TELA()
	CLS
	@ 0,0 say "CDD File Manager"

	@ 1,0 TO MAXROW()-1-4,20 DOUBLE
	@ 1,21 TO MAXROW()-1-4,MAXCOL() DOUBLE

	@ MAXROW()-4,0 say "Path  :"
	@ MAXROW()-3,0 say "Folder:"
	@ MAXROW()-2,0 say "File  :"
	@ MAXROW()-1,0 say "Menu  " + chr(16)
	@ MAXROW()-0,0 say "Esc=Menu/Exit  "+chr(24)+chr(25)+chr(27)+chr(26)+"=Move  Space=Select  Enter=Execute   Cut=Ctrl+X   Copy=Ctrl+C   Paste=Ctrl+V   Delete=DELETE"
	@ 1,20  say chr(24)
	@ 1,MAXCOL() say chr(24)

	for x=2 to MAXROW()-1-4
		@ x,20 say chr(176)
		@ x,MAXCOL() say chr(176)
	next

	@ MAXROW()-1-4,20 say chr(25)
	@ MAXROW()-1-4,MAXCOL() say chr(25)
RETURN NIL

function caracteres()
	@ 0,0 say ""
	FOR i = 0 TO 255
		?? chr(i) , "=" , alltrim(str(i)) , " "
	NEXT
	INKEY(0)
return nil
alxsts
Colaborador
Colaborador
Mensagens: 3146
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil
Curtiram: 1 vez

Re: Gerenciador de Arquivos em Harbour

Mensagem por alxsts »

Olá!

Qual seria a dificuldade?

Pelo trecho de código mostrado, está tentando alterar a pasta para ela mesma. Se já está na pasta, não haverá alteração...

Chamou atenção o fato de tentar fazer isto montando uma string e executando com RUN...

É estranho pois em outro lugar do código mostra o uso da função nativa do Harbour DirChange(), que altera o drive e/ou pasta corrente para outro.

Por que não usa ela com o parâmetro correto?
Jorge Luiz escreveu: 03 Mai 2026 20:56

Código: Selecionar todos

ASP = LASTKEY()
		IF ESCOLHA != 0
			DirChange(NOMES[ESCOLHA])
		ENDIF
Pelo que parece, ao encerrar o programa, quer reposicionar na pasta onde o programa iniciou. Para fazer isto, basta salvar a pasta atual no início do programa...

Código: Selecionar todos

LOCAL cOriginalPath := CurDir()
... e restaurar no final...

Código: Selecionar todos

DirChange( cOriginalPath )
QUIT
Este código exibido pode ser bem.melhorado...

Edit:

Se deseja um gerenciador de arquivos estilo Windows Explorer escrito em Clipper, modo console, visite este tópico e baixe o arquivo .RAR nele anexado (colaboração do saudoso Pablo César). O executável que tem lá foi compilado em Clipper e só funciona em sistemas operacionais Windows de 16 ou 32 bits. Mas tem o fonte e o arquivo de cabeçalho. Tente gerar o executável na tua máquina. Vale a pena!
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20482
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: Gerenciador de Arquivos em Harbour

Mensagem por JoséQuintas »

Verifique corretamente o retorno
O normal é usar hb_CWD()

CWD = current working directory, pasta atual

Pode haver diferença entre drive, ou \ do path, ou path relativo, comparado a curdir()
Não sei se cabeça, num caso desses faria os testes pra confirmar.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Gerenciador de Arquivos em Harbour

Mensagem por Jorge Luiz »

O código abaixo sempre retorna para a mesma pasta!
Eu não quero isso!
Quero sair do programa, em outra pasta diferente da atual!
Como seria possível?

O código abaixo não quer se comportar em outra pasta! Veja?

Código: Selecionar todos

			// =================================
			// Estou sentindo dificuldade aqui!
			// =================================	
			CLS
			cOriginalPath := CurDir()
			DirChange( cOriginalPath )
			QUIT
			// =================================
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20482
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: Gerenciador de Arquivos em Harbour

Mensagem por JoséQuintas »

Não sei se estou entendendo direito o que está querendo.
Parece que quer fazer a navegação, e manter um path atualizado.

Isso não se trata apenas de um comando, mas das variáveis que vai estar usando no navegador.
E se tem o retorno geral no final, vai precisar remover.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Gerenciador de Arquivos em Harbour

Mensagem por Jorge Luiz »

Isso!
Quero navegar nas pastas!
Quando sair!
Retorna na pasta que saiu!
Não na pasta onde foi instalado!
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Gerenciador de Arquivos em Harbour

Mensagem por Jorge Luiz »

Mesmo usando esse código não funciona!

Código: Selecionar todos

			// =================================
			// Estou sentindo dificuldade aqui!
			// =================================	
			CLS
			cOriginalPath := hb_CWD()
			? "Original Path: " + cOriginalPath
			RUN( 'cmd /c powershell -Command "cd ' + cOriginalPath + '"' )
			QUIT
			// =================================
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20482
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: Gerenciador de Arquivos em Harbour

Mensagem por JoséQuintas »

Como consegue fazer uma pergunta tão estranha com exemplo tão extranho?

o path inicial é "JOSE"
Aí no final muda pra "JOSE"
Mas não é "JOSE" que você quer.... é outro.

E o path que quer vém de onde ? do espaço sideral ?
Se você não sabe, outra pessoa muito menos.

Quer que alguém desenvolva um navegador pra você, é isso ?
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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
JoséQuintas
Administrador
Administrador
Mensagens: 20482
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 2 vezes

Re: Gerenciador de Arquivos em Harbour

Mensagem por JoséQuintas »

Pensando bem....

Acho que o que está querendo é a função de api do Windows de abrir path e/ou abrir arquivo.

Aliás....
Mudar path do windows.... só se for pra navegar em modo console ou algo assim.
Sei lá... agora sim não entendo mais nada.
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (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/
Jorge Luiz
Usuário Nível 1
Usuário Nível 1
Mensagens: 29
Registrado em: 08 Jul 2024 20:23
Localização: Piauí

Re: Gerenciador de Arquivos em Harbour

Mensagem por Jorge Luiz »

Estou tentando criar um Gerenciador de Arquivos que navega nas pastas
Estou na pasta C:\cdd
Tenho três pastas
Xampp
htdcocs
users
Entro na pasta htdocs
Fica
C:\htdocs
Quero sair do programa C:\htdocs não na pasta anterior C:\cdd

O programa está no Github para Download ou Compile o código que mensionei acima!
https://iatagancursos.github.io/cdd/ger ... uivos.html
Responder