Diff
checker
Texte
Texte
Images
Documents
Excel
Dossiers
Legal
Enterprise
Application de bureau
Prix
Se connecter
Télécharger Diffchecker Desktop
Comparer le texte
Trouver la différence entre deux fichiers texte
Outils
Historique
Affichage
Vue
Divisé
Unifié
Éditeur live
Masquer les espaces
Cacher identiques
Sans retour à la ligne
Niveau de précision
Intelligent
Syntaxe
Aucun
Modifier l’apparence
Traitement
Ignorer
Transformer le texte
Aller au premier écart
Modifier l'entrée
Diffchecker Desktop
La façon la plus sécurisée d'utiliser Diffchecker. Obtenez l'application Diffchecker Desktop : vos diffs ne quittent jamais votre ordinateur !
Obtenir Desktop
Untitled diff
Créé
il y a 9 ans
Le diff n'expire jamais
Effacer
Exporter
Partager
Expliquer
139 suppressions
Lignes
Total
Supprimé
Caractères
Total
Supprimé
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
110 lignes
Copier tout
120 ajouts
Lignes
Total
Ajouté
Caractères
Total
Ajouté
Pour continuer à utiliser cette fonctionnalité, passez à
Diff
checker
Pro
Voir les prix
82 lignes
Copier tout
Copier
Copié
Copier
Copié
f
unction
internalRuncommand(p:TProcess;
var
outputstring:string;
F
unction
ReadInputPipe(const Pipe: TInputPipeStream;
var
BytesRead,OutputLen: integer;
var
OutputString:
string
): Boolean
;
var
stderrstring:
string
; var exitstatus:integer):integer
;
var
var
numbytes,bytesread,
available : integer;
available : integer;
outputlength, stderrlength : integer;
NumBytes
: integer;
stderrnumbytes,stderrbytesread
: integer;
begin
begin
r
esult
:=-1;
R
esult
:= False; available := 0;
if(BytesRead<0)then BytesRead := 0;
if(OutputLen<0)then OutputLen := 0;
repeat
if(Pipe=nil)then exit;
if(Pipe.NumBytesAvailable>0)
then available := Pipe.NumBytesAvailable
else break;
if(BytesRead+available>OutputLen)then
begin
OutputLen := BytesRead+READ_BYTES;
SetLength(OutputString,OutputLen);
end;
try
try
try
try
p.Options := [poUsePipes];
NumBytes :=
Pipe
.Read(
O
utput
S
tring[1+
B
ytes
R
ead], available);
bytesread:=0;
if
(
NumBytes
>0)
outputlength:=0;
then
Inc(BytesRead, NumBytes);
stderrbytesread:=0;
except
stderrlength:=0;
Result := False;
p.Execute;
while p.Running do
begin
// Only call ReadFromStream if Data from corresponding stream
// is already available, otherwise, on linux, the read call
// is blocking, and thus it is not possible to be sure to handle
// big data amounts bboth on output and stderr pipes. PM.
available:=P.Output.NumBytesAvailable;
if available > 0 then
begin
if (BytesRead + available > outputlength) then
begin
outputlength:=BytesRead + READ_BYTES;
Setlength(outputstring,outputlength);
end;
NumBytes :=
p.Output
.Read(
o
utput
s
tring[1+
b
ytes
r
ead], available);
if
NumBytes
> 0 then
Inc(BytesRead, NumBytes);
end
// The check for assigned(P.stderr) is mainly here so that
// if we use poStderrToOutput in p.Options, we do not access invalid memory.
else if assigned(P.stderr) and (P.StdErr.NumBytesAvailable > 0) then
begin
available:=P.StdErr.NumBytesAvailable;
if (StderrBytesRead + available > stderrlength) then
begin
stderrlength:=StderrBytesRead + READ_BYTES;
Setlength(stderrstring,stderrlength);
end;
StderrNumBytes := p.StdErr.Read(stderrstring[1+StderrBytesRead], available);
if StderrNumBytes > 0 then
Inc(StderrBytesRead, StderrNumBytes);
end
else
Sleep(100);
end;
end;
// Get left output after end of execution
finally
available:=P.Output.NumBytesAvailable;
Result := True;
while available > 0 do
begin
if (BytesRead + available > outputlength) then
begin
outputlength:=BytesRead + READ_BYTES;
Setlength(outputstring,outputlength);
end;
end;
NumBytes := p.Output.Read(outputstring[1+bytesread], available);
until false;
if NumBytes > 0 then
Inc(BytesRead, NumBytes);
available:=P.Output.NumBytesAvailable;
end;
end;
setlength(outputstring,B
ytes
R
ead
)
;
while assigned(P.
stderr
) and (P.S
tderr
.NumBytesAvailable > 0) do
Function InternalRunCommand(var P: TProcess; var Stdout, Stderr: string; var ExitStatus:integer): integer;
var
b
ytes
r
ead
_stdout : integer
;
outputlen_stdout : integer;
bytesread_
stderr
: integer;
outputlen_s
tderr
: integer;
begin
begin
available:=P.Stderr.NumBytesAvailable;
Result := -1; if(P=nil)then exit;
if (StderrBytesRead + available > stderrlength) then
try
try
P.Options := [poUsePipes];
bytesread_stdout := 0;
outputlen_stdout := 0;
bytesread_stderr := 0;
outputlen_stderr := 0;
P.Execute;
while(P.Running)do
begin
begin
stderrlength:=StderrBytesRead + READ_BYTES;
if(not ReadInputPipe(P.Output, bytesread_stdout, outputlen_stdout, Stdout))and
Setlength(stderrstring,stderrlength);
(not ReadInputPipe(P.Stderr, bytesread_stderr, outputlen_stderr, Stderr))
end;
then sleep(100);
StderrNumBytes := p.StdErr.Read(stderrstring[1+StderrBytesRead], available);
if StderrNumBytes > 0 then
Inc(StderrBytesRead, StderrNumBytes);
end;
end;
setlength(stderrstring,StderrBytesRead);
//Get remaining output after end of execution:
e
xit
s
tatus
:=p.e
xit
s
tatus;
ReadInputPipe(P.Output, bytesread_stdout, outputlen_stdout, Stdout);
r
esult
:=
0; // we came to here, document that.
ReadInputPipe(P.Stderr, bytesread_stderr, outputlen_stderr, Stderr);
E
xit
S
tatus
:= P.E
xit
S
tatus;
R
esult
:=
0; // we came to here, document that.
except
except
on e : Exception do
R
esult
:= 1;
begin
r
esult
:=1;
setlength(outputstring,BytesRead);
end;
end;
end;
finally
finally
p.free;
FreeAndNil(P);
SetLength(Stdout,bytesread_stdout);
SetLength(Stderr,bytesread_stderr);
end;
end;
end;
end;
f
unction RunCommand(const
exen
ame:string;const
c
ommands:array of string;var
outputstring
:string):
b
oolean;
F
unction RunCommand(const
ExeN
ame:string;const
C
ommands:array of string;var
Stdout,StdErr
:string):
B
oolean;
V
ar
v
ar
p : TProcess;
E
xit
S
tatus
,i
: integer;
i,
P
:
TProcess
;
e
xit
s
tatus
: integer;
ErrorString
:
String
;
begin
begin
p:=
TProcess.
c
reate(nil);
P :=
TProcess.
C
reate(nil);
p
.Executable
:=exen
ame;
P
.Executable
:= ExeN
ame;
if high(commands)>=0
then
if high(commands)>=0
for i:=low(
c
ommands) to high(
c
ommands)
do
then
for i:=low(
C
ommands) to high(
C
ommands)
p
.Parameters.
a
dd(
c
ommands[i]);
do P
.Parameters.
A
dd(
C
ommands[i]);
r
esult
:=i
nternal
runc
ommand(
p,outputstring,errorstring,e
xit
s
tatus)=0
;
R
esult
:= (I
nternal
RunC
ommand(
P,StdOut,StdErr,E
xit
S
tatus)=0
) and (E
xit
S
tatus
=0)
;
if e
xit
s
tatus
<>0 then result:=false
;
end;
end;
Copier
Copié
Copier
Copié
Différences enregistrées
Texte d'origine
Ouvrir un fichier
function internalRuncommand(p:TProcess;var outputstring:string; var stderrstring:string; var exitstatus:integer):integer; var numbytes,bytesread,available : integer; outputlength, stderrlength : integer; stderrnumbytes,stderrbytesread : integer; begin result:=-1; try try p.Options := [poUsePipes]; bytesread:=0; outputlength:=0; stderrbytesread:=0; stderrlength:=0; p.Execute; while p.Running do begin // Only call ReadFromStream if Data from corresponding stream // is already available, otherwise, on linux, the read call // is blocking, and thus it is not possible to be sure to handle // big data amounts bboth on output and stderr pipes. PM. available:=P.Output.NumBytesAvailable; if available > 0 then begin if (BytesRead + available > outputlength) then begin outputlength:=BytesRead + READ_BYTES; Setlength(outputstring,outputlength); end; NumBytes := p.Output.Read(outputstring[1+bytesread], available); if NumBytes > 0 then Inc(BytesRead, NumBytes); end // The check for assigned(P.stderr) is mainly here so that // if we use poStderrToOutput in p.Options, we do not access invalid memory. else if assigned(P.stderr) and (P.StdErr.NumBytesAvailable > 0) then begin available:=P.StdErr.NumBytesAvailable; if (StderrBytesRead + available > stderrlength) then begin stderrlength:=StderrBytesRead + READ_BYTES; Setlength(stderrstring,stderrlength); end; StderrNumBytes := p.StdErr.Read(stderrstring[1+StderrBytesRead], available); if StderrNumBytes > 0 then Inc(StderrBytesRead, StderrNumBytes); end else Sleep(100); end; // Get left output after end of execution available:=P.Output.NumBytesAvailable; while available > 0 do begin if (BytesRead + available > outputlength) then begin outputlength:=BytesRead + READ_BYTES; Setlength(outputstring,outputlength); end; NumBytes := p.Output.Read(outputstring[1+bytesread], available); if NumBytes > 0 then Inc(BytesRead, NumBytes); available:=P.Output.NumBytesAvailable; end; setlength(outputstring,BytesRead); while assigned(P.stderr) and (P.Stderr.NumBytesAvailable > 0) do begin available:=P.Stderr.NumBytesAvailable; if (StderrBytesRead + available > stderrlength) then begin stderrlength:=StderrBytesRead + READ_BYTES; Setlength(stderrstring,stderrlength); end; StderrNumBytes := p.StdErr.Read(stderrstring[1+StderrBytesRead], available); if StderrNumBytes > 0 then Inc(StderrBytesRead, StderrNumBytes); end; setlength(stderrstring,StderrBytesRead); exitstatus:=p.exitstatus; result:=0; // we came to here, document that. except on e : Exception do begin result:=1; setlength(outputstring,BytesRead); end; end; finally p.free; end; end; function RunCommand(const exename:string;const commands:array of string;var outputstring:string):boolean; Var p : TProcess; i, exitstatus : integer; ErrorString : String; begin p:=TProcess.create(nil); p.Executable:=exename; if high(commands)>=0 then for i:=low(commands) to high(commands) do p.Parameters.add(commands[i]); result:=internalruncommand(p,outputstring,errorstring,exitstatus)=0; if exitstatus<>0 then result:=false; end;
Texte modifié
Ouvrir un fichier
Function ReadInputPipe(const Pipe: TInputPipeStream; var BytesRead,OutputLen: integer; var OutputString: string): Boolean; var available : integer; NumBytes : integer; begin Result := False; available := 0; if(BytesRead<0)then BytesRead := 0; if(OutputLen<0)then OutputLen := 0; repeat if(Pipe=nil)then exit; if(Pipe.NumBytesAvailable>0) then available := Pipe.NumBytesAvailable else break; if(BytesRead+available>OutputLen)then begin OutputLen := BytesRead+READ_BYTES; SetLength(OutputString,OutputLen); end; try try NumBytes := Pipe.Read(OutputString[1+BytesRead], available); if(NumBytes>0) then Inc(BytesRead, NumBytes); except Result := False; end; finally Result := True; end; until false; end; Function InternalRunCommand(var P: TProcess; var Stdout, Stderr: string; var ExitStatus:integer): integer; var bytesread_stdout : integer; outputlen_stdout : integer; bytesread_stderr : integer; outputlen_stderr : integer; begin Result := -1; if(P=nil)then exit; try try P.Options := [poUsePipes]; bytesread_stdout := 0; outputlen_stdout := 0; bytesread_stderr := 0; outputlen_stderr := 0; P.Execute; while(P.Running)do begin if(not ReadInputPipe(P.Output, bytesread_stdout, outputlen_stdout, Stdout))and (not ReadInputPipe(P.Stderr, bytesread_stderr, outputlen_stderr, Stderr)) then sleep(100); end; //Get remaining output after end of execution: ReadInputPipe(P.Output, bytesread_stdout, outputlen_stdout, Stdout); ReadInputPipe(P.Stderr, bytesread_stderr, outputlen_stderr, Stderr); ExitStatus := P.ExitStatus; Result := 0; // we came to here, document that. except Result := 1; end; finally FreeAndNil(P); SetLength(Stdout,bytesread_stdout); SetLength(Stderr,bytesread_stderr); end; end; Function RunCommand(const ExeName:string;const Commands:array of string;var Stdout,StdErr:string): Boolean; var ExitStatus,i : integer; P : TProcess; begin P := TProcess.Create(nil); P.Executable := ExeName; if high(commands)>=0 then for i:=low(Commands) to high(Commands) do P.Parameters.Add(Commands[i]); Result := (InternalRunCommand(P,StdOut,StdErr,ExitStatus)=0) and (ExitStatus=0); end;
Trouver la différence