Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema con funcion Para Archivos (https://www.clubdelphi.com/foros/showthread.php?t=51755)

angelp4492 28-12-2007 02:34:18

Problema con funcion Para Archivos
 
Hola como estan?
Pues veran tengo un problema con esta funcion que no puedo echarla a andar.

Código Delphi [-]
if copy(date,1,5)='Upload' then
   begin
        memo1.Lines.Add(date);
   SizeOfFile:=StrToInt(copy(date,7,pos('|',date)-7));
      //  memo1.Lines.Add(date);
   delete(date,1,pos('|',date));
   // memo1.Lines.Add(date);
   // memo1.Lines.Add(intTostr(SizeOfFile));
   UploadTo:=copy(date,1,Pos('|',date)-1);
    memo1.Lines.Add(uploadto);
   delete(date,1,pos('|',date));
   ServerState:=sSRecieveingFile;
   UFS:=TFileStream.Create(UploadTo,fmCreate or fmOpenWrite);
     end;
    case ServerState of sSRecieveingFile :
    begin
    try
    begin
    ufs.Write(date[1],length(date));
    Dec(SizeOfFile,length(date));
   if SizeOfFile = 0 then
    begin
    ServerState:=sSIdle;
    socket.SendText('Resultado'+'Fichero Subido..');
    UFs.free;
    sleep(1500);
    Socket.SendText('TomaFicheros'+ListFiles(ExtractFileDir(UploadTo)));
   end;
    end;
    except begin
    ufs.Free;
   Socket.SendText('Resultado'+'Fallo al Subir Fichero');
     end;
 end;
end;
 end;

La he estado testeando y el problema que tengo esq depues de chequear el if del principio y ver que la palabra recibida en el socket no es upload, el salto siguiente es hacia el case y hay esta el problema porq deberia de no hacer nada y pasar a otra cosa. Si me salta al case y no he mandado nin gun fichero pues entonces me da error de lectura..

Alguna idea de como podria solucionar esto.Gracias

jachguate 28-12-2007 03:06:34

Hola.

He editado tu post original para añadir la etiqueta [delphi]. Verás que la presentación del código publicado está mucho mejor ahora.

Para ver cómo funciona la etiqueta, te recomiendo presionar el botón de "editar" tu mensaje original.

hasta luego.

;)

jachguate 28-12-2007 03:13:08

con respecto de tu duda original, he cambiado la indentación para que resulte evidente el inicio fín de los bloques

Código Delphi [-]
if copy(date,1,5)='Upload' then
begin
  memo1.Lines.Add(date);
  SizeOfFile:=StrToInt(copy(date,7,pos('|',date)-7));
  //  memo1.Lines.Add(date);
  delete(date,1,pos('|',date));
  // memo1.Lines.Add(date);
  // memo1.Lines.Add(intTostr(SizeOfFile));
  UploadTo:=copy(date,1,Pos('|',date)-1);
  memo1.Lines.Add(uploadto);
  delete(date,1,pos('|',date));
  ServerState:=sSRecieveingFile;
  UFS:=TFileStream.Create(UploadTo,fmCreate or fmOpenWrite);
end;
case ServerState of
  sSRecieveingFile :
    begin
      try
        begin
          ufs.Write(date[1],length(date));
          Dec(SizeOfFile,length(date));
          if SizeOfFile = 0 then
          begin
            ServerState:=sSIdle;
            socket.SendText('Resultado'+'Fichero Subido..');
            UFs.free;
            sleep(1500);
            Socket.SendText('TomaFicheros'+ListFiles(ExtractFileDir(UploadTo)));
          end;
        end;
      except
        begin
          ufs.Free;
          Socket.SendText('Resultado'+'Fallo al Subir Fichero');
       end;
      end;
   end;
end;

Cómo podes ver, el case está fuera del begin/end que delimitan lo que se hará al cumplirse la condición del if.

He quitado algunos pares de begin/end que estaban de mas, y dejado el case dentro del bloque que se ejecuta al cumplirse la condición del if, que es lo que supongo que querés.

Código Delphi [-]
if copy(date,1,5)='Upload' then
begin
  memo1.Lines.Add(date);
  SizeOfFile:=StrToInt(copy(date,7,pos('|',date)-7));
  delete(date,1,pos('|',date));
  UploadTo:=copy(date,1,Pos('|',date)-1);
  memo1.Lines.Add(uploadto);
  delete(date,1,pos('|',date));
  ServerState:=sSRecieveingFile;
  UFS:=TFileStream.Create(UploadTo,fmCreate or fmOpenWrite);
  case ServerState of
    sSRecieveingFile :
      try
        ufs.Write(date[1],length(date));
        Dec(SizeOfFile,length(date));
        if SizeOfFile = 0 then
        begin
          ServerState:=sSIdle;
          socket.SendText('Resultado'+'Fichero Subido..');
          UFs.free;
          sleep(1500);
          Socket.SendText('TomaFicheros'+ListFiles(ExtractFileDir(UploadTo)));
        end;
      except
        ufs.Free;
        Socket.SendText('Resultado'+'Fallo al Subir Fichero');
      end;
  end;
end;

Hasta luego.

;)

angelp4492 28-12-2007 15:01:07

Pues he cambiado el codigo por el que has puesto y no funciona, me manda el archivo pero esta vacio.

rcarrillom 28-12-2007 15:29:17

Si no me equivoco, la condición del if nunca se va a cumplir

Código Delphi [-]
if copy(date,1,5)='Upload' then
porque la cadena que se extrae de date es de longitud 5 y se compara contra una de longitud 6.

jachguate 28-12-2007 17:52:33

Cita:

Empezado por rcarrillom (Mensaje 254805)
Si no me equivoco, la condición del if nunca se va a cumplir

Código Delphi [-]
if copy(date,1,5)='Upload' then
porque la cadena que se extrae de date es de longitud 5 y se compara contra una de longitud 6.

Claro!! ese y otros errores no consitían en tu pregunta original. Recordá que la responsabilidad de que esto funcione es tuya, no nuestra.

Hasta luego.

;)

angelp4492 28-12-2007 18:04:51

Tienes toda la razon es verdad q la longitud de la palabra es 5, porq en el codigo original que tengo probando tengo puesto subir en vez de upload, y como ya no se que puede pasar me puedes decir un sitio donde vea algún ejemplo de transferencia de archivos via socket, asi la cambio q ya me tiene arto.

jachguate 28-12-2007 18:19:36

Si estas dispuesto a cambiar toda la rutina. creo recordar que las INDY traian un demo de transferencia de archivos. No estoy seguro y ahora no tengo tiempo de verificar por mi mismo.

Los demos de las indy están en la página del proyecto indy

Hasta luego.

;)


La franja horaria es GMT +2. Ahora son las 21:39:01.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi