Índices - Arquivos Temporários

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

Moderador: Moderadores

Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Índices - Arquivos Temporários

Mensagem por Mário Isa »

Alow!

Quando executo o comando INDEX ON

Ele está criando um arquivo .TMP lá numa pasta do windows vejam.
Este erro pode ter sido causado por causa que eu estou utilizando um software que inibe o acesso a algumas pastas do windows, para me proteger de vírus

Error DBFNTX/1061 Write error: C:\DOCUME~1\usuario1\CONFIG~1\Temp\xhtD7.tmp
Called from (b)ERRORSYS(72)
Called from ORDCREATE(0)
Called from INDEXON(9489)
Called from FAZ_NTX2(374)
Called from ABRE(213)
Called from USEI(292)
Called from TELAEROB(9)


Tem como "falar" pro programa que os arquivos .TMP (TEMP) / tem que ficar numa certa pasta de minha preferência ?

Abraços
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: Índices - Arquivos Temporários

Mensagem por Mário Isa »

Olhando o manual descobri que / se eu inserir a cláusula / TEMPORARY / no comando INDEX ON

diz, traduzido para o português:

Se esta opção for especificada, um índice temporário é criado, que é destruído automaticamente quando o índice está fechado. O índice temporário pode ser criada somente na memória ou em um arquivo temporário. Esta reside na responsabilidade do RDD utilizado para criação de índice.

Sim / tudo bem / se precisa criar um .TEMP / tudo bem / mas eu gostaria de especificar a pasta onde ele é criado / tem como ?

Mário
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: Índices - Arquivos Temporários

Mensagem por Mário Isa »

Acho que eu já descobri

Abrindo o AVISO DO MS-DOS e digitando SET <enter>

vemos / entre outras variáveis de ambiente:

TEMP=C:\DOCUME~1\note1\CONFIG~1\Temp
TMP=C:\DOCUME~1\note1\CONFIG~1\Temp

pelo jeito é isso:

Eu devo definir / ainda no aviso do DOS / digamos:

set TEMP=D:\MINHAPASTA
e
set TMP=D:\MINHAPASTA

Mas só tem jeito lá pelo DOS né ?

Teria algum comando do XHARBOUR para definir ?

É que eu quero "fugir" de ter que mexer nas config's do DOS. Porque se não teria que ir em cada cliente .
(A)
Hasse
Usuário Nível 4
Usuário Nível 4
Mensagens: 820
Registrado em: 19 Out 2004 10:30
Localização: Jaraguá do Sul - SC

Re: Índices - Arquivos Temporários

Mensagem por Hasse »

Olá Mario.

Bem eu tentaria e usaria uma das 5 formas abaixo:

1-Setar as variáveis TEMP e TMP via Painel de Controle -> Sistema -> Configurações avançadas do Sistema -> Variáveis de ambiente -> Variáveis de usuário. Alí você tem TEMP=%USERPROFILE%\AppData\Local\Temp. Altere para a pasta desejada.

2-Criar um BAT que seria disparado antes do executável MeuPrograma.exe. Alí as variáveis seriam setadas:
set TEMP=D:\MINHAPASTA
set TMP=D:\MINHAPASTA
MeuPrograma.exe


3-No Autoxec.nt que está na pasta System32 incluir os set's desejados.
set TEMP=D:\MINHAPASTA
set TMP=D:\MINHAPASTA


4-De dentro do PRG setar as variáveis, usando o comando RUN ou !:
RUN set TEMP=D:\MINHAPASTA
RUN set TMP=D:\MINHAPASTA


5-De dentro do PRG setar as variáveis, usando uma função API do Windows:
winexec("set TEMP=D:\MINHAPASTA")
winexec("set TMP=D:\MINHAPASTA")


Certamente uma destas formas vai satisfazer as tuas necessidades.
Hasse
CP200 / CP500 / Basic / dBase III / dBase IV / Clipper Summer / RTlink / Exospace.
Clipper 5.3b / Blinker 7.0 / CDX com TAG
xHarbour 1.2.1-6604 / Borland C++ (5.5.1) 32 bit / HBmake.
Harbour 3.2.0dev (r1412121623) / MINGW / HBM2 / MiniGui HMG 3.1.4 / IDE (Roberto Lopez).
"Conheça todas as teorias, domine todas as técnicas, mas, quando tocares uma alma humana, seja apenas outra alma humana." (C.G.Jung)
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Índices - Arquivos Temporários

Mensagem por alxsts »

Olá!

Perdoem minha ignorancia sobre [x]Harbour. Não sei como funciona o processo de linkedição nessa plataforma.

Em Clipper, quando se utilizava o Blinker (não me lembro se isso é possível também no Exospace), podia-se definir ("burn") as variáveis de ambiente no próprio script de linkedição.
Exemplo:

Código: Selecionar todos

BLINKER EXECUTABLE CLIPPER //Dynf:8 //F:254 //TEMPPATH:'C:\WINDOWS\TEMP'
É uma idéia. Se for viável, o executável distribuido já conteria essa informação, sendo desnecessário alterar configurações de cada máquina.
[]´s
Alexandre Santos (AlxSts)
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: Índices - Arquivos Temporários

Mensagem por Mário Isa »

obrigadão pelas dicas!
Valeu muito !

Mário
:xau :{
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Re: Índices - Arquivos Temporários

Mensagem por Mário Isa »

mas eu tentei / e de todas as formas não deu certo / a única forma q dá certo é a primeira / pelo painel de controle / sistema /////

nem mesmo pelo autoexec.nt não dá

:-´
Euclides
Usuário Nível 3
Usuário Nível 3
Mensagens: 154
Registrado em: 12 Mai 2007 14:07
Localização: São Paulo, Capital

Re: Índices - Arquivos Temporários

Mensagem por Euclides »

Olá Mario,
no FWH, eu utilizo:

Código: Selecionar todos

 cTemp:=getenv("TEMP")+"\temp"
 ...
 index on <expression> to &cTemp

Nota: com 32 bits, manda para C:\DOCUME~1\<usuario>\CONFIG~1\Temp
      com 16 bits, manda para C:\windows\TEMP 
Espero que isso ajude,
Euclides
Mário Isa
Usuário Nível 4
Usuário Nível 4
Mensagens: 907
Registrado em: 07 Jul 2004 13:54
Localização: Ilha Solteira-sp

Índices - Arquivos Temporários

Mensagem por Mário Isa »

Depois de tanto tempo tive que ressuscitar esse tópico por causa dos recentes ataques de virus daqueles tipos que compactam os arquivos do computador e criptografam e ainda pedem um $$$ prá devolver .....

então pensei ...

quero proteger minha pasta (onde estão meus programas) para que ninguém, a não ser o meu programa, tenha direito de alterar tais arquivos e ninguém mais ....

Tentei pela aba segurança e ainda não obtive sucesso.

Qq coisa posto aqui
:%
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Índices - Arquivos Temporários

Mensagem por asimoes »

Mário

Para definir uma variável de ambiente em tempo de execução:

SetEnvironmentVariable( "TEMP", "D:\TMP" )

Código: Selecionar todos

// -----------------------
// AUTOR: Alexandre Simäes
// 10-2012
// Miscellaneous functions
// -----------------------
//_WINMISC.CPP
//------------------------
#define _WIN32_WINNT   0x0400

#include <windows.h>
#include <shlobj.h>
#include <math.h>
#include "hbapi.h"
#include "hbvm.h"
#include "hbstack.h"
#include "hbapiitm.h"

#include "time.h"
#include "hbapifs.h"
#include <shellapi.h>
#include <shlwapi.h>
#include <lmcons.h>
#include <commctrl.h>

#ifndef LONG_PTR
#define LONG_PTR LONG
#endif

//-----------------------------------------------------------------------------
// WINBASEAPI LPSTR WINAPI GetEnvironmentStrings( VOID );

// note: returns the actual pointer

HB_FUNC( GETENVIRONMENTSTRINGS )
{
   hb_retnl( (LONG) GetEnvironmentStrings(  ) ) ;
}

//-----------------------------------------------------------------------------
// WINBASEAPI LPSTR WINAPI GetEnvironmentStrings( VOID );

HB_FUNC( FREEENVIRONMENTSTRINGS )
{
   hb_retl( (LONG) FreeEnvironmentStrings( (LPTSTR) hb_parnl(1) ) ) ;
}

//-----------------------------------------------------------------------------
// WINBASEAPI DWORD WINAPI GetEnvironmentVariableA( IN LPCSTR lpName, OUT LPSTR lpBuffer, IN DWORD nSize );

HB_FUNC( GETENVIRONMENTVARIABLE )
{
   UINT dwLen = MAX_PATH ;
   char *cText = (char*) hb_xgrab( MAX_PATH+1 );
   DWORD dwRet ;

   dwRet = GetEnvironmentVariableA( (LPCSTR) hb_parcx( 1 ),
                                    (LPSTR) cText ,
                                    (DWORD) dwLen
                                  ) ;
   hb_retclen( cText, dwRet );
   hb_xfree( cText );

}

//-----------------------------------------------------------------------------
// WINBASEAPI BOOL WINAPI SetEnvironmentVariableA( IN LPCSTR lpName, IN LPCSTR lpValue );

HB_FUNC( SETENVIRONMENTVARIABLE )
{
   hb_retl( SetEnvironmentVariableA( (LPCSTR) hb_parcx( 1 ),
                                     (LPCSTR) hb_parcx( 2 )
                                     ) ) ;
}
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Responder