cybersky
Messages postés40Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention25 mai 2009
-
18 déc. 2005 à 18:33
Utilisateur anonyme -
19 déc. 2005 à 12:06
bonsoir
voila avec le code suivant j'arrive bien a recevoir la liste des fichiers mais je voudrais avoir la liste des sous dossiers et en affichant les dossiers dans un TTreeView et les fichiers dans un TListview
//------------------------------------------------------------------------------
// Enumére la liste de fichier partagé
//------------------------------------------------------------------------------
procedure EnumFiles(WildCard : string;
FileList : TStrings;
StripExtensions: boolean);
var
SRec: TSearchRec;
Error: DWORD;
begin
try
FileList.Clear;
Error := FindFirst(WildCard, faANYFILE, SRec);
while Error = 0 do
begin
if SRec.Attr and faDIRECTORY = 0 then
if not StripExtensions then
FileList.Add(lowercase(SRec.Name))
else
FileList.Add(ChangeFileExt(lowercase(SRec.Name), ''));
Error := FindNext(SRec);
end;
Sysutils.FindClose(SRec);
except
messagebeep(0);
end;
end;
//------------------------------------------------------------------------------
// Envoie de donnée
//------------------------------------------------------------------------------
procedure SendData( Sock: TCustomWinSocket; Code: DWORD; PayLoad: string);
var
S : TMemoryStream;
Header : TMsgHeader;
begin
// installe header
with Header do
begin
OpCode := Code;
PayLoadLen := Length(PayLoad);
end;
S := TMemoryStream.Create;
S.Write( Header, SizeOf(Header) );
// en cas de messages utile sans charge ...
if Header.PayLoadLen > 0 then
S.Write( PayLoad[1], Header.PayLoadLen );
S.Position := 0;
Sock.SendStream( S ); // **note** stream will be freed by socket !!
end;
if not Assigned(Destination) then EXIT;
if length(Destination.Text) > 20000 then
Destination.Clear;
Destination.Add( TimeToStr(Now) + ' : ' + Txt );
end;
//------------------------------------------------------------------------------
//Envoie du fichier
//------------------------------------------------------------------------------
procedure SendFile( Socket: TCustomWinSocket; FName: string );
var
Header : TMsgHeader;
Fs : TFileStream;
S : TMemoryStream;
begin
if FileExists( FName ) then
try
//------------------------------------------------------------------------------
//Message complet
//------------------------------------------------------------------------------
function MessageComplete( var SockBuf: string;
var Header : TMsgHeader;
var PayLoad: string ): boolean;
begin
Result := false;
if Length( SockBuf ) > SizeOf(Header) then // frappement de paranoïa...
begin
Move( SockBuf[1], Header, SizeOf(Header));
// avons-nous au moins un message complet?
if length(SockBuf) >= Header.PayLoadLen + SizeOf(Header) then
begin
// si oui, supprimez l'en-tête
Delete( SockBuf, 1, SizeOf(Header));
// copiez du buf à la charge utile
PayLoad := Copy( SockBuf, 1, Header.PayLoadLen);
// juste au cas où un autre message serait déjà dans la canalisation!
Delete( SockBuf, 1, Header.PayLoadLen );
Result := true;
end;
end;
end;
ni69
Messages postés1418Date d'inscriptionsamedi 12 juin 2004StatutMembreDernière intervention 5 juillet 201012 19 déc. 2005 à 01:48
Francky >> je ne sais pas si cela avancera cybersky
si tu lui dis que son code est trop compliqué et qu'il faut qu'il le
refasse entièrement... Donne au moins des axes de modification, donne
des exemples, justifie ta remarque quoi...
Ni69 j'ai déjà répondu à cette question sur autre topic. Je me répète alors :
Prendre la méthode récursive de Mister GrandVizir et au lieu d'afficher dans le mémo utiliser un sendtext. Ensuite à lui de distinguer au niveau de la récursivité et du sendtext les fichiers et les sous répertoires.
Réception : en fonction du sendtext on envoye soit dans un mémo spécial pour les fichiers soit dans un mémo spécial pour les répertoires.
Le mieux est d'aller voir le topic (il y avait un début de code je crois)
Pour être plus constructif :j'ai dis que c'était compliqué. En effet il me semble pas utile de passer par un stream.
La technique citée avant est basée sur : recherche des fichiers du HD et envoye du nom de chaque fichiers par un sendtext (plutot que de l'afficher dans un mémo).
Coté serveur : recherche les fichiers environ 5-10 lignes. Envoyer par un sendtext 1 lign donc au max une dizaine de ligne et 1 procédure (et 1 autre pour appeler cette procédure).
coté client : identique
Donc je trouve ca un peu lourd personnellement. Ce qui m'a choqué est l'utilisation pour moi abusive du stream.
J'ai modifié par le passé la source de grand vizir, j'ai pu transferer une arborescence en 13 lignes bon c'était pas tres esthétique mais c'était juste pour le fun.