AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Probleme mit kurzen und langen Dateinamen / Übergabe
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit kurzen und langen Dateinamen / Übergabe

Ein Thema von frieder2008 · begonnen am 21. Mär 2009 · letzter Beitrag vom 21. Mär 2009
Antwort Antwort
Seite 2 von 2     12   
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#11

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 19:35
Ja, das habe ich auch verstanden; aber die Parameter einzeln in "" habe ich doch:

Execandwait(shortfilename('c:\treetagger\bin\CCCGraph.bat'),'"C:\TreeTagger\BIN\test.txt" "C:\treetagger\bin\tagged_test.txt"',sw_normal); Oder bin ich blind?

Danke für Deine Geduld..

Ach ja: und es gibt eine Begrenzung: 255 Zeichen..
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#12

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 19:40
Ja, Dein EDIT hatte ich übersehen.

Kannst ja mal die Parameterübergabe mit einer Debug-Bat testen:
Code:
@echo off
cls

echo Parameterliste:
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9

pause
wenn Du ExecAndWait aufrufst:
Execandwait(shortfilename('c:\treetagger\bin\CCCGraph.bat'),'"C:\TreeTagger\BIN\test.txt" "C:\treetagger\bin\tagged_test.txt"',sw_normal); und innerhalb ExecAndWait wieder an den Strings rumbastelst und statt FileName CmdLine nimmst, dann funktioniert das nicht.
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#13

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 19:46
Probiers mal so (Copy&Paste bitte... Funtion ist mit der 2 anders benannt)
Delphi-Quellcode:
function ExecAndWait2(const Filename, Param1, Param2: string; WindowState: word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  // Parameterliste
  CmdLine := '"' + Param1 + '" "' + Param2 + '"';

  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do
  begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;
 
  // vvvvvvvvvvvvvv
  Result := CreateProcess(PChar(Filename), PChar(CmdLine), nil, nil, FALSE,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);

  //Warten bis beendet
  if Result then
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end;
Aufruf dann:
ExecAndWait2(shortfilename('c:\treetagger\bin\CCCGraph.bat'),'C:\TreeTagger\BIN\test.txt','C:\treetagger\bin\tagged_test.txt',sw_normal); €: Hatte jetzt selber ein Fehler drin

PS: normalerweise gehört natürlich CmdLine außerhalb zusammengebaut und als ein Params übergeben, damit ExecAndWait universell bleibt.
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#14

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 20:00
Danke, Fehler hatte ich bemerkt. Ok, jetzt wird die Batch gestartet. Aber selbst wenn ich in die Batch nur die Parameter testweise abfrage, kommt nichts. Die "pause" wird gar nicht bearbeitet. Vielmehr scheint - keine Ahnung von wem oder was - der Vorgang sofort wieder abgebrochen zu werden.

Mit der Shellexecute-Version wird die Batch ebenso aufgerufen und die Parameter korrekt übergeben. Wenn ich aber im Anschluss an diese Params-Test-Lines den eigentlichen Aufruf starte, wird die Batch abgebrochen und das Cmd-Fenster sofort geschlossen, so dass ich nicht einmal kontrollieren kann, woran es eigentlich liegt?!

Das ist der Inhalt der Batch-Datei (testweise).

Code:
@echo off

cls

echo Parameterliste:
echo %1
echo %2
echo %3
echo %4
echo %5
echo %6
echo %7
echo %8
echo %9

pause
// Soweit hat alles gefunzt; hier aber bricht er jetzt ab.

set TAGDIR=C:\Treetagger
set BIN=%TAGDIR%\bin
set CMD=%TAGDIR%\cmd
set LIB=%TAGDIR%\lib
set TAGOPT=%LIB%\german.par -token -lemma -sgml -no-unknown

if "%2"=="" goto label1
perl %CMD%\tokenize.pl -a %LIB%\german-abbreviations %1 | %BIN%\tree-tagger %TAGOPT% > %2
goto end

:label1
if "%1"=="" goto label2
perl %CMD%\tokenize.pl -a %LIB%\german-abbreviations %1 | %BIN%\tree-tagger %TAGOPT%
goto end

:label2
echo.
echo Usage: tag-german file {file}
echo.

:end

pause
Seltsam seltsam.. Kann ich evtl. das automatische Fensterschließen verhindern?

EDIT:

Wenn ich die Zeile

c:\treetagger\bin\CCCGraph.bat','C:\TreeTagger\BIN \test.txt', 'C:\treetagger\bin\tagged_test.txt

direkt im CMD eingebe, läuft die Batch einwandfrei. Es muss also an der Schnittstelle von Delphi und CMD liegen..
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#15

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 20:06
Also hab' mir CreateProcess mal in der OH angesehen. Dein erster Ansatz war richtig, nur die Paramerterübergabe falsch.
Bei mir war Parameterübergabe richtig, aber die Bedeutung AppName / CommandLine falsch gedeutet.

Hier nochmal:
Delphi-Quellcode:
function ExecAndWait2(const Filename, Param1, Param2: string; WindowState: word): boolean;
var
  SUInfo: TStartupInfo;
  ProcInfo: TProcessInformation;
  CmdLine: string;
begin
  // Parameterliste
  CmdLine := Filename +' "' + Param1 + '" "' + Param2 + '"';

  FillChar(SUInfo, SizeOf(SUInfo), #0);
  with SUInfo do
  begin
    cb := SizeOf(SUInfo);
    dwFlags := STARTF_USESHOWWINDOW;
    wShowWindow := WindowState;
  end;

  Result := CreateProcess(NIL, PChar(CmdLine), nil, nil, FALSE,
                          CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS, nil,
                          PChar(ExtractFilePath(Filename)), SUInfo, ProcInfo);

  //Warten bis beendet
  if Result then
    WaitForSingleObject(ProcInfo.hProcess, INFINITE);
end;
Alles an CmdLine übergeben war also OK, Nur die " waren an der falschen Stelle gesetzt. Probier es bitte nochmal mit der Funktion oben.
  Mit Zitat antworten Zitat
frieder2008

Registriert seit: 28. Feb 2009
78 Beiträge
 
#16

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 20:12
Hey, super, ich hab schon verzweifelt. Jetzt klappts! Da scheiden sich eben die Profis von den Möchtegernprofis, also meiner Wenigkeit.

Wenn Du in der Nähe wärst, würd' ich Dir en Bier ausgeben!

Vielen Dank für Deine Geduld und noch schönen Abend,
frieder aus Heidelberg
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#17

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 20:13
Moin frieder2008,

lass' mal das @echo off weg, und dann setze hinter jede verdächtige Zeile mal eine Pause.
Der SET-Block müsste auch noch problemlos abgearbeitet werden.

Ausserdem solltest Du mal ausprobieren, was passiert, wenn Du Parameter mit Umlauten übergibst, da die Konsole einen anderen Zeichensatz verwendet als die übrigen Programme.
Wenn Du also in Delphi einen Pfad mit Umlauten hast, der dort korrekt angezeigt wird, wird dieser in der Konsole ungültig sein.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#18

Re: Probleme mit kurzen und langen Dateinamen / Übergabe

  Alt 21. Mär 2009, 20:25
Zitat von frieder2008:
Hey, super, ich hab schon verzweifelt.
Sehr schön.. aber wäre ich ein Profi, hätte ich am Anfang nicht auch gleich einen (anderen) Fehler eingebaut
Zitat:
Ausserdem solltest Du mal ausprobieren, was passiert, wenn Du Parameter mit Umlauten übergibst
Ja, ein weiterer Grund besser für alles ShortFileName zu verwenden, dann sollte das ja umgangen werden.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:47 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz