Newsgroup: it.comp.lang.delphi
Titolo: Nomi file lunghi come parametri da riga di comando: estensioni superiori ai 3 caratteri

Ho creato una semplicissima applicazione che accetta parametri dalla riga di
comando.
Ne deriva che (in Win32), trascinando un file sull'icona
dell'eseguibile della mia applicazione, i nomi dei file vengono passati come
parametri (utilizzabili con le funzioni ParamStr e ParamCount).
Fin qui tutto bene, senonchè i nomi dei file lunghi vengono letti in formato
8.3, per cui
    nomefilelungo.pas
diventa, poniamo
    nomefi~1.pas
E questo è accettabile, perchè il nome nomefi~1.pas è UNICO all'interno
della propria directory.
Ma per le estensioni superiori ai 3 caratteri, come la mettiamo?
Infatti
    myfile.~ex1
mi viene letto da ParamStr (e anche da CmdLine) come
    myfile.~ex
allo stesso modo di
    myfile.~ex9
(che viene letto ancora come myfile.~ex).
Voglio precisare che non conosco affatto il modo con cui viene implementato
in Win32 il supporto per i file lunghi, ma come potrei superare questa
limitazione (dell'ambiente? del linguaggio?) ???
Per inciso, neanche con la funzione API SHGetFileInfo presumo che otterrei
il risultato voluto, perchè come è scritto sulla guida essa richiede che le
venga passato un "puntatore a un buffer che contiene il percorso e il nome
del file". Quindi siamo punto e a capo perchè dovrei passare alla
SHGetFileInfo sempre il nome del file in formato 8.3 come viene restituito
da ParamStr o CmdLine.
Qualcuno ha un consiglio in merito?
Mauro Falzari.
"Se guardi nell'abisso, anche l'abisso guarda in te."
(Friedrich Nietzsche)

Come non detto, ho fatto un grossolano errore, infatti nella stessa cartella
avendo due file che si chiamano:
    mylongnamefile.~ex1
    mylongnamefile.~ex9
in nomi in DOS vengono trasfomati per esempio in:
    mylong~1.~ex
    mylong~2.~ex
per cui restanno sempre univoci.
Grazie e scusate per il disturbo.
--


Se mi spieghi come hai fatto a fare in modo che trasinando un incona
sull'icona dell'eseguibile questo mi apra il file e il programma, mi metto a
vedere come si fa per risolvere i tuo problema, al tempo l'avevo visto per
quanto riguarda l'apertura di un documento facendo doppio click su un icona,
l'ho fatto registrando il mio exe nel file di registro con la sintassi:
"D:\MIEI\mio\mio.EXE" /a "%1"
gli apici servono perche0 altrimenti da problemi con i nomi lunghi e corti,
sopratutto in presenza di spazi..
ciao
--
--------------------------------------------
Per rispondere in privato rimuovere "1975"
Assistenza Samsung: Dopo 3 mesi ancora il nulla.
--------------------------------------------

 sull'icona dell'eseguibile questo mi apra il file e il programma,
in Win32, se trascini uno o più file sull'iconda dell'eseguibile (o anche su
un Collegamento) risultante da questo file DPR ottieni che allo stesso
vengano passati i nomi dei file stessi, come parametri della riga di comando
(vedi alla guida, voce "command-line utilities"). Per esempio hai le
funzioni ParamCount che restituiscono il numero di parametri (0 se non ce ne
sono) e ParamStr(n) per estrarre l'n-esimo parametro.
Puoi provare così, in un file DPR:
-------------------------------------------------------------
program Project1;
uses
  Dialogs;
{$R *.res}
var
  n: Integer;
begin
  for n:= 1 to ParamCount do
  begin
    try
      ShowMessage(ParamStr(n));
    except
//non faccio nulla e passo al parametro successivo
    end           //try
  end              //for
end.
---------------------------------
Ciao
--
Mauro Falzari.
"Se guardi nell'abisso, anche l'abisso guarda in te."
(Friedrich Nietzsche)
