AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TCP Filelistening

Ein Thema von Briand · begonnen am 14. Jan 2014 · letzter Beitrag vom 1. Mär 2014
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.360 Beiträge
 
Delphi 12 Athens
 
#1

AW: TCP Filelistening

  Alt 15. Jan 2014, 09:41
Ich weiß auch nicht, wie es schon im Forum erwähnt wurde?
KEINER VERGLEICHE MIT TRUE/FALSE

Zitat:
Delphi-Quellcode:
      Repeat
        sFileName := sRec.cFileName;

        If (sRec.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then Begin
        End
        Else
        Begin
          sFileList := sFileList + sFileName + '++';
        End;
      Until FindNextFile(findHandle, sRec) = False;
Nja, merkwürdig ist eigentlich nur das sinnlose ELSE und die unnötigen BEGIN-END.

Delphi-Quellcode:
      Repeat
        sFileName := sRec.cFileName;
        If sRec.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY = 0 Then
          sFileList := sFileList + sFileName + '++';
      Until not FindNextFile(findHandle, sRec);

      Repeat
        If sRec.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY = 0 Then Begin
          sFileName := sRec.cFileName;
          sFileList := sFileList + sFileName + '++';
        End;
      Until not FindNextFile(findHandle, sRec);

      Repeat
        If sRec.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY = 0 Then
          sFileList := sFileList + sRec.cFileName + '++';
      Until not FindNextFile(findHandle, sRec);
Und wenn jetzt noch dieses "++" in einem Dateinamen vorkommt, dann war's das.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.658 Beiträge
 
Delphi 12 Athens
 
#2

AW: TCP Filelistening

  Alt 15. Jan 2014, 09:45
Den 2. Code entspricht ja meinem, nur dass ich das FindClose noch untergebracht habe.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TCP Filelistening

  Alt 15. Jan 2014, 10:22
.. wenn eine Variable sFileList heißt,
warum verwendest Du dann keine?
Eine StringList würde sich hier anbieten.

Dann benötigst Du noch ein Übertragungs-Protokoll.

z.B.

fileCount:8Byte
fileNumber: 8Byte
fileName:1024 Byte
fileSize: 8Byte
fileData: fileSize

fileNumber: 8Byte
fileName:1024 Byte
fileSize: 8Byte
fileData: fileSize

Grüße
Klaus
Klaus

Geändert von Klaus01 (15. Jan 2014 um 10:43 Uhr)
  Mit Zitat antworten Zitat
Briand
(Gast)

n/a Beiträge
 
#4

AW: TCP Filelistening

  Alt 24. Jan 2014, 11:40
Also ich hab das nun so gelöst weiss zwar nicht ob es der richtige Weg ist aber es funktioniert

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Winapi.Messages, SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Buttons, Web.Win.Sockets,
  System.Win.ScktComp, Vcl.ComCtrls, Vcl.StdCtrls, Vcl.ExtCtrls;
type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    client: TClientSocket;
    server: TServerSocket;
    SpeedButton2: TSpeedButton;
    lv1: TListView;
    Edit1: TEdit;
    Procedure SpeedButton1Click(Sender: TObject);
    Procedure clientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    Procedure serverClientRead(Sender: TObject; Socket: TCustomWinSocket);
    Procedure clientRead(Sender: TObject; Socket: TCustomWinSocket);
    Punction ListFiles(sDir: String): String;
    Punction GetFileSize(sFile: PChar): Int64;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }

  end;

var
  Form1: TForm1;
  LI2: TListItem;
  ListedFiles: Ansistring;
  TotalFiles: integer;
  i : integer;
implementation

Uses Unit3;
  {$R *.dfm}

Function ListFiles(sDir: String): String;
Var
  sFileName: String;
  sFileList: String;
  sSizeList: String;
  sRec: TWin32FindData;
  findHandle: THandle;
  Begin
  totalfiles := 0;
 If AnsiLastChar(sDir) <> '\Then
 Begin
   sDir := sDir + '\';
 End;
  Try
    findHandle := FindFirstFile(PChar(sDir + '*.*'), sRec);
    If findHandle <> INVALID_HANDLE_VALUE Then
      Repeat
        sFileName := sRec.cFileName;
        If (sRec.dwFileAttributes And FILE_ATTRIBUTE_DIRECTORY) <> 0 Then Begin
        End
        Else
        Begin
        sFileList := sFileList + sFileName +'¦'+ IntToStr(GetFileSize(PChar(sDir + sFileName))) + '|';
        totalfiles := totalfiles + 1;
        End;
      Until FindNextFile(findHandle, sRec) = False;
  Finally
  End;
  Result := sFileList;
End;

Function GetFileSize(sFile: PChar): Int64;
Var
  fFile: THandle;
  wFD: TWIN32FINDDATA;
Begin
  Result := 0;
  If Not FileExists(sFile) Then
  Begin
  Exit;
  End;
  fFile := FindFirstFile(PChar(sFile), wFD);
  If fFile = INVALID_HANDLE_VALUE Then
  Begin
  Exit;
  End;
  Result := (wFD.nFileSizeHigh * (Int64(MAXDWORD) + 1)) + wFD.nFileSizeLow;
  Windows.FindClose(fFile);
End;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
form1.server.Socket.Connections[0].SendText('FileStart|');
form1.lv1.Clear;
end;

procedure TForm1.clientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
errorcode := 0;
end;

procedure TForm1.clientRead(Sender: TObject; Socket: TCustomWinSocket);
var cData, Ccmd: string;

begin
 cData := socket.ReceiveText;
 Ccmd := copy(cData,0,pos('|',cData)-1);

 if cCmd = ('FileStart') then
 begin
 ListedFiles := ListFiles('C:\MeineFotos\ordner1');
 form1.Caption := inttostr(totalfiles);
if totalfiles = 0 then
begin
  exit
end;
 form1.client.Socket.SendText('FileADD|'+ copy(ListedFiles,0,pos('|',ListedFiles)-1));
 Delete(ListedFiles,1,pos('|',ListedFiles));
 totalfiles := totalfiles -1;
 end;

 if cCmd = ('FileNEXT') then
 begin
 if totalfiles = 0 then
 begin
 exit
 end;

 if Totalfiles = 1 then
 begin
 form1.client.Socket.SendText('FileEND|'+ copy(ListedFiles,0,pos('|',ListedFiles)-1));
 end
 else begin
 form1.client.Socket.SendText('FileADD|'+ copy(ListedFiles,0,pos('|',ListedFiles)-1));
 Delete(ListedFiles,1,pos('|',ListedFiles));
 totalfiles := totalfiles -1;
 end;
 end;

end;

procedure TForm1.serverClientRead(Sender: TObject; Socket: TCustomWinSocket);
var
  sData, sCmd: string;

begin
 sData := Socket.ReceiveText;
 sCmd := copy(SData,0,pos('|',sData)-1);

 if sCmd = ('FileADD') then
 begin
 Delete(sdata,1,pos('|',sdata));
 LI2 := form1.lv1.Items.Add;
 LI2.Caption := copy(sdata,0,pos('¦',sdata)-1);
 Delete(sdata,1,pos('¦',sdata));
 LI2.SubItems.Add(sdata);
 form1.server.Socket.Connections[0].SendText('FileNEXT|');
 end;

 if sCmd = ('FileEND') then
 begin
 Delete(sdata,1,pos('|',sdata));
 LI2 := form1.lv1.Items.Add;
 LI2.Caption := copy(sdata,0,pos('¦',sdata)-1);
 Delete(sdata,1,pos('¦',sdata));
 LI2.SubItems.Add(sdata);

 end;

end.

Geändert von Briand (24. Jan 2014 um 11:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#5

AW: TCP Filelistening

  Alt 24. Jan 2014, 16:36
Immernoch fehlerhaft!
Das ursprngliche Problem, wo ich eine Lösung dafür in meinem zweiten Beitrag beschrieben habe, ist ungelöst..

Edit1: Kann sein, dass ReceiveText() und SendText() das per LineBreak Marker doch regelt.. In dem Fall sollte es passen; muss halt nur einer bestätigen bzw. nachkucken.

Edit2: Ich hab schnell nachgekuckt:
Delphi-Quellcode:
function TCustomWinSocket.ReceiveText: AnsiString;
begin
  SetLength(Result, ReceiveBuf(Pointer(nil)^, -1));
  SetLength(Result, ReceiveBuf(Pointer(Result)^, Length(Result)));
end;

function TCustomWinSocket.SendText(const s: AnsiString): Integer;
begin
  Result := SendBuf(Pointer(S)^, Length(S) * SizeOf(AnsiChar));
end;
Folglich kannste mein Edit1 vergessen --> dein Problem ist weiterhin nicht gelöst! Der Fehler wird nur selten auftreten (bei hoher RTT und niedriger Window/Buffersize)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG

Geändert von Aphton (24. Jan 2014 um 16:41 Uhr)
  Mit Zitat antworten Zitat
Briand
(Gast)

n/a Beiträge
 
#6

AW: TCP Filelistening

  Alt 27. Jan 2014, 00:07
Also Aphton ich verstehe da leider nur Bahnhof.....Bin halt ein Neuling in dem Bereich.

Wie müsste mann dann das machen damit es richtig funktionier?
  Mit Zitat antworten Zitat
Briand
(Gast)

n/a Beiträge
 
#7

AW: TCP Filelistening

  Alt 10. Feb 2014, 22:35
hmmmm bin nach fast 2 Wochen leider immer noch nicht weiter....
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz