Casa
Top.Mail.Ru Yandeks.Metrika
Foro: "Sistema";
Archivo actual: 2002.01.08;
Descargar: [xml.tar.bz2];

abajo

Cómo copiarse si el programa se está ejecutando. Encontrar ramas similares


VS   (2001-09-27 07:14) [0]

¿Cómo puedo copiarme si la aplicación ya se está ejecutando?
Es decir moverse de una carpeta a otra.



Digitman   (2001-09-27 08:55) [1]

¿Entonces "mover" o "copiar"?

La copia se realiza de forma elemental, ya que no está prohibido abrir el archivo para leerlo en el momento en que se ejecuta la tarea desde él.

Moverse es mucho más difícil debido a la naturaleza de la implementación de Delphi. Y solo es posible en Win9x.



VS   (2001-09-27 14:09) [2]

Lo siento Copia. Si puedes intentarlo.



Andrey Klimov   (2001-09-27 14:19) [3]

función NormalDir (const DirName: string): string;
comenzar
Resultado: = DirName;
if (Resultado <> "") y
no (Resultado [Longitud (Resultado)] en [":", "\"]) luego
comenzar
if (Longitud (Resultado) = 1) y (UpCase (Resultado [1]) en ["A" .. "Z"]) entonces
Resultado: = Resultado + ": \"
más Resultado: = Resultado + "\";
fin;
fin;

función HasAttr (const FileName: string; Attr: Integer): Boolean;
var
FileAttr: Integer;
comenzar
FileAttr: = FileGetAttr (FileName);
Resultado: = (FileAttr> = 0) y (FileAttr y Attr = Attr);
fin;

función GetFileSize (const FileName: string): Int64;
var
Mango: mango;
FindData: TWin32FindData;
comenzar
Manejar: = FindFirstFile (PChar (FileName), FindData);
si Handle <> INVALID_HANDLE_VALUE entonces comienza
Windows.FindClose (Manija);
if (FindData.dwFileAttributes y FILE_ATTRIBUTE_DIRECTORY) = 0 entonces
comenzar
Int64Rec (Resultado) .Lo: = FindData.nFileSizeLow;
Int64Rec (Resultado) .Hi: = FindData.nFileSizeHigh;
Salida
fin;
fin;
Resultado: = -1;
fin;

procedimiento CopyFileEx (const FileName, DestName: string; OverwriteReadOnly, ShellDialog: Boolean);
var
CopyBuffer: Puntero;
Fuente, Dest: Entero;
Destino: TFileName;
BytesCopied: Longint;
Attr: entero;
const
ChunkSize: Longint = 8192;
comenzar
Destino: = DestName;
si HasAttr (Destino, faDirectory) entonces
Destino: = NormalDir (Destino) + ExtractFileName (FileName);
GetMem (CopyBuffer, ChunkSize);
tratar de
Fuente: = FileOpen (FileName, fmShareDenyWrite);
si Fuente <0 entonces
raise EFOpenError.CreateFmt (ResStr (SFOpenError), [FileName]);
tratar de
ForceDirectories (ExtractFilePath (Destino));
si OverwriteReadOnly entonces comienza
Attr: = FileGetAttr (Destino);
si (Attr> = 0) y ((Attr y faReadOnly) <> 0) entonces
FileSetAttr (Destino, Attr y no faReadOnly);
fin;
Dest: = FileCreate (Destino);
si Dest <0 entonces
raise EFCreateError.CreateFmt (ResStr (SFCreateError), [Destino]);
tratar de
repetir
BytesCopied: = FileRead (Source, CopyBuffer ^, ChunkSize);
si BytesCopied = -1 entonces
raise EReadError.Create (ResStr (SReadError));
si BytesCopied> 0 entonces comience
si FileWrite (Dest, CopyBuffer ^, BytesCopied) = -1 entonces
elevar EWriteError.Create (ResStr (SWriteError));
fin;
hasta BytesCopied <ChunkSize;
FileSetDate (Dest, FileGetDate (Source));
finalmente
FileClose (Dest);
fin;
finalmente
FileClose (Fuente);
fin;
finalmente
FreeMem (CopyBuffer, ChunkSize);
fin;
fin;




Юрий Зотов   (2001-09-27 16:40) [4]

Wow Super!

Pero parece que no se pueden reinventar las bicicletas. Por ejemplo:
CopyFile (PChar (ParamStr (0)), PChar ("New Path" + ExtractFileName (ParamStr (0))), True);

O SHFileOperation (si desea mostrar el diálogo).



Andrey Klimov   (2001-09-27 18:24) [5]

Y también puede insertar código para dibujar cualquier barra de progreso ... reproducir música, etc. No me gustan las cajas negras. Desde la infancia, tengo un "¿qué hay dentro?" ... :)



Юрий Зотов   (2001-09-27 18:54) [6]

> Andrey Klimov

Sin embargo, te contradices. En lugar de una función API en su código, se usan varias, por lo tanto, hay mucho más cajas negras en él. Y la probabilidad de un error es mucho mayor.

Progressbar dibuja SHFileOperation, también sin nuestra participación. Y la música, etc. Puede ser torcido en un hilo paralelo.

La API de Win32 está probada por millones de usuarios y programadores de todo el mundo. ¿Deberías creerte más que Microsoft?



Andrey Klimov   (2001-09-27 20:30) [7]

No, no lo contradigas. En este caso, no me gustan las cajas negras "sobre el tema", es decir, por ejemplo, no me gusta el cuadro de diálogo de copia de archivos ESTÁNDAR, o no quiero usar el cuadro de diálogo de formato Shelley para disquetes ... Estoy en ese sentido. Por supuesto, como resultado, en lugar de una única función de API, se pueden realizar llamadas a incluso más funciones de API, pero, como regla general, incluso a un nivel inferior. Nuevamente, es necesario conocer la medida, de lo contrario se puede "reducir" al código de la máquina. Y la probabilidad de un error ... ¿Y quién no pasa? Para eso son los Maestros y este foro (s).

Creerse?
A veces vale la pena. Cuando quiera "pervertir" (en términos de la interfaz, por ejemplo). No discutiré, y tienes razón. Sin embargo, también nos las arreglamos para dar algunas respuestas? Habría una opción, y el interrogador le dejaría decidir qué respuesta utilizar. Por ejemplo, me enfurece cuando solo hay una respuesta a lo que sea mi pregunta (a veces no responden en absoluto), aunque sé que debería haber más opciones, como, hacer esto porque solo tienes que hacerlo. ¿Por qué tan SOLAMENTE? ¿Por qué es imposible destacar formas alternativas?






Páginas: 1 rama entera

Foro: "Sistema";
Archivo actual: 2002.01.08;
Descargar: [xml.tar.bz2];

arriba





Memoria: 0.58 MB
Tiempo: 0.027 c
1-22088
Mikhalyov Dmitry
2001-12-19 14:58
2002.01.08
llamada de evento del programa


1-22225
Reyst
2001-12-16 15:56
2002.01.08
No se pudo guardar el recurso en el archivo


4-22513
Oxy2
2001-10-23 23:23
2002.01.08
¿Cómo crear formularios con diferentes controles en una API pura?


6-22313
SB
2001-10-01 15:05
2002.01.08
Ayuda a abandonar la red! Por favor hazlo


1-22082
Chak
2001-12-19 10:07
2002.01.08
Cómo pasar un parámetro de función a una DLL.





africaans albanés Arabic armenio Azerbaiyán vasco Bielorruso Bulgarian Catalán Chino (simplificado) Chino (tradicional) Croata Checo Danés Dutch Inglés Estonia filipina Finnish French
gallego georgiano Alemán Griego criollo haitiano Hebreo hindi Húngaro islandés Indonesian irlandés Italiano Japonés Korean letón lituano macedonio Malay maltés Noruego
persa polaco Portuguese Rumano Ruso Serbio Slovak Esloveno Español swahili Sueco Thai turco ucranio Urdu vietnamita galés yídish bengalí bosnio
cebuano esperanto gujarati hausa hmong igbo javanés kannada khmer lao latín maorí marathi mongol nepali punjabi somalí Tamil telugu yoruba
zulú
Английский Francés Alemán Italiano portugués Русский Español