Comment connaitre le répertoire d'installation de windows [C++] - C++ - Programmation
Marsh Posté le 14-11-2003 à 15:55:55
j'aurai préféré une variable non systeme mais ça m'aide
connais tu la variable qui donne la plateforme?
Marsh Posté le 14-11-2003 à 16:16:25
sinon j'ai eu une idée lumineuse
Borland comporte aussi un composant TNMFTP !!!!!!!!
ce qui est bcp plus propre!
je vais essayer de procéder ainsi
Marsh Posté le 14-11-2003 à 16:55:35
Pour les répertoires :
UINT GetWindowsDirectory(LPTSTR lpBuffer, UINT uSize);
UINT GetSystemDirectory(LPTSTR lpBuffer, UINT uSize);
Pour la version de l'os :
DWORD GetVersion(void);
Marsh Posté le 14-11-2003 à 16:57:26
et pour faire du FTP :
InternetOpen();
InternetConnect();
puis y a plein de fonctions pour faire du ftp facile : FtpCreateDirectory(), FtpSetCurrentDirectory(), FtpPutFile(), etc.
Marsh Posté le 14-11-2003 à 17:26:43
et le rep de lutilisateur courant comment on fait ? par exemple si on veut placer un fichier sur le bureau ....
Marsh Posté le 14-11-2003 à 17:32:34
Petit Prince a écrit : |
tu peux lancer juste ftp.exe. Le dossier de Windows étant dans le path il trouvera ftp.exe tout seul.
Petit Prince a écrit : sinon j'ai eu une idée lumineuse |
TNMFTP c'est un vieux brol.
Ça a été remplacé par TIFTP dans Delphi 6.
Pour les anciennes versions de Delphi ou la version "perso" il faut télécharger Indy : http://www.nevrona.com/Indy/.
Marsh Posté le 14-11-2003 à 17:34:33
red faction a écrit : et le rep de lutilisateur courant comment on fait ? par exemple si on veut placer un fichier sur le bureau .... |
Code :
|
Appelé par :
Code :
|
(faudra probablement inclure la unit ShlObj)
Marsh Posté le 14-11-2003 à 17:37:19
antp a écrit :
|
tout ca existe sous visual ?? (je veux dire c du win32 ou des fonctions bricolage a la borland)
Marsh Posté le 14-11-2003 à 17:51:41
oups comme il parlait de TNMFTP je pensais que c'était Delphi, au lieu de C++Builder (les deux sont pareils pour les composants, donc mon histoire sur le TIdFTP est encore valable).
Le code que j'ai posté c'est du Delphi, mais qui utilise juste les fonctions de l'API Win32.
Donc en fait tu dois faire un appel à ShGetSpecialFolderLocation en passant CSIDL_DESKTOPDIRECTORY comme SDIDL, ça te renvoie un PIDL.
Ensuite un appel à ShGetPathfromIDList en passant le PIDL.
Et enfin libérer l'allocation faite pour le PIDL.
Ça doit passer sans problèmes dans Visual C++ et C++Builder. (dans ce dernier, il faudra probablement inclure ShlObj.hpp)
Marsh Posté le 16-11-2003 à 01:25:57
antp a écrit : oups comme il parlait de TNMFTP je pensais que c'était Delphi, au lieu de C++Builder (les deux sont pareils pour les composants, donc mon histoire sur le TIdFTP est encore valable). |
oki je regarderai
sinon quand je met ftp simplement il me lance ftp dans l'explorateur de windows
que veut dire "brol"?
Marsh Posté le 16-11-2003 à 01:26:39
Konar a écrit : et pour faire du FTP : |
merchi ça m'a l'air sympathique comme solution
Marsh Posté le 16-11-2003 à 12:55:19
Petit Prince a écrit : |
Je viens de voir que c'est même pas dans le dico
C'est un mot utilisé en Belgique comme synonyme de "machin", "truc", "bidule", etc.
Petit Prince a écrit : |
bah le TIdFTP doit pas être beaucoup plus difficile.
Les fonctions citées plus haut utilisent en fait Internet Explorer ; ça a ses avantages et ses inconvénients
Marsh Posté le 17-11-2003 à 13:52:21
TIdFTP est mieux que NMFTP pour quelles raisons?
Parce que j'ai un brol assez détaillé de NMFTP (exemple d'utilisation etc)
Marsh Posté le 17-11-2003 à 16:17:04
"un brol de ..."
dans ce contexte là ça ne va pas, ne tente pas d'utiliser des mots des autres langues sans les connaître
TIdFTP est une version beaucoup plus récente de TNMFTP.
Petite histoire que Zion avait raconté sur le forum mais que je ne retrouve plus, donc je la reraconte en espérant que ce soit correct :
Les composants "NM..." ont été faits il y a longtemps par NetMasters, qui les a refilés à Borland.
Le gars qui les a faits pour NetMasters n'ayant pas été payé, il a tout foutu en OpenSource sur internet et c'est devenu Indy.
Par la suite, vu qu'Indy était gratuit et mis à jour, Borland a remplacé les composants NetMasters par Indy.
Marsh Posté le 17-11-2003 à 16:36:17
antp a écrit : "un brol de ..." |
ah oki
suivant tes conseils, je me suis lancé dans TIdFTP
impossible d'utiliser la fonction put (pour remplacer le fichier du serveur par le fichier qui est sur mon ordi)
IdFTP1->Put("coco.txt","coco.txt",true) ;
Il me dit que le fichier existe déjà (j'ai essayé de mettre n'importe quel autre nom dans le 2e parametre sans succès)
Marsh Posté le 17-11-2003 à 17:07:07
Et en ne sépcifiant que le nom du fichier source et pas les deux autres paramètres ?
Et en mettant le chemin complet du fichier source ?
Et en mettant false pour le troisième paramètre ?
Marsh Posté le 18-11-2003 à 13:47:34
Marsh Posté le 18-11-2003 à 14:28:00
Petit Prince a écrit : |
tiens essaie ca ca devrait marcher (c fait a l'arrache mais le principe est la):
Code :
|
Marsh Posté le 18-11-2003 à 15:48:28
voilà avec le chemin complet ça marche ...
sinon les 2 autres trucs j'avais essayé
merci
Marsh Posté le 18-11-2003 à 15:50:18
bibouchon a écrit :
|
g compris ton raisonnement
en fait le message d'erreur renvoyé est incorrect d'où mon erreur
merci de t'être penché sur mon pb!
Marsh Posté le 18-11-2003 à 15:53:16
Pour finir je vais quand meme la soluce au cas où d'autre personne tombent dessus
Code :
|
et le dernier paramètre est le booléen du "append"?
Marsh Posté le 18-11-2003 à 17:54:29
Petit Prince a écrit : Pour finir je vais quand meme la soluce au cas où d'autre personne tombent dessus
|
oui.
Extrait de la doc de TIdFTP.Put :
procedure Put(const ASourceFile: string; const ADestFile: string; const AAppend: boolean); overload;
Put is an overloaded procedure that uploads data to a file with the name specified in ADestFile on the FTP server. The uploaded data can be either a stream (ASource) or a name of a file which exists on the user's computer (ASourceFile).
Setting AAppend to True causes the server to append the file being uploaded to one which already exists on the FTP server.
Marsh Posté le 20-11-2003 à 15:37:43
J'en profite puisque je suis ave cdes connaisseurs des composants d'Indy
Je cherche une fonction qui me permettrai de savoir les octects reçus (pour faire une barre de progression lorsque j'upload le fichier)
J'ai pas mal cherché et rien trouvé
Je sais que les composants NM le permettent
BytesRecvd
BytesSent
j'ai l'impression que les composants Indy ne le permettent pas ;(
Marsh Posté le 20-11-2003 à 15:38:58
Il y a un événement qui permettait de faire ça dans le TIdHTTP, il doit bien y avoir ça dans le TIdFTP, non ?
Marsh Posté le 20-11-2003 à 15:43:05
antp a écrit : Il y a un événement qui permettait de faire ça dans le TIdHTTP, il doit bien y avoir ça dans le TIdFTP, non ? |
apparemment non, ou alors ce n'est pas documenté dans l'aide
je pensais faire appel à vous (au cas où vous la connaissiez)
je vais voir si des sites en parlent, sinon je vais ptet utiliser les composants NM
est-ce qu'un truc comme ça pourrait etre utilisé?
RecvBufferSize
Indicates the current size of the default receive buffer for the connection.
property RecvBufferSize: Integer;
Description
RecvBufferSize is an Integer property that represents the number of bytes currently allocated to the default receive buffer used for the connection.
The default value for RecvBufferSize is 8192 bytes, and is asssigned in Create.
Use ExtractXBytesFromBuffer to remove data from the receive buffer.
Marsh Posté le 20-11-2003 à 17:00:47
http://www.developpez.net/forums/viewtopic.php?t=96484
Il n'y a pas un équivalent dans le TIdFTP ?
Marsh Posté le 20-11-2003 à 17:02:35
Après une recherche de quelques secondes, ces événements existent aussi dans le TIdFTP
Heureusement que j'avais dit de regarder dans les events parce qu'il en existait qui faisaient ça
Marsh Posté le 21-11-2003 à 14:50:26
Ah ça y est j'ai vu, merci
Désolé comme tu peux voir, je suis encore débutant et j'ai pas encore les bons automatismes. (je cherche pas bien etc..)
(meme avec ta réponse, j'avais pas trouvé!!! rho)
Et pourtant je t'assure que j'ai cherché avant de demander
Marsh Posté le 21-11-2003 à 16:59:10
Pour utiiser intercept, apparemment il faut l'associer à un IdLogDebug
et mettre intercept enable à true
mais apres la fonction Recv renvoie tout le tps 0
à quoi sert elle alors?
Merci bcp, j'ai pas mal cherché et rien trouvé!
****************** function Recv ***************************
Performs read operations for the socket handler.
function Recv(var ABuf; ALen: Integer): Integer; virtual;
Parameters
var ABuf
Pointer to the buffer for received data.
ALen: Integer
Number of bytes to read, or size of the memory buffer.
Returns
Integer - Number of bytes received. Default Value is 0.
Description
Recv is an Integer function that performs read operations for the Binding that represents the socket connection. When the TIdConnectionIntercept component is enabled and RecvHandling is indicated, Recv is the method used to perform all read operations instead of the Recv method for the Binding.
Recv is used in conjunction with DataReceived to allow the TIdConnectionIntercept to perform transformations for any data read from the protocol stack.
Note: Recv is a virtual method in TIdConnectionIntercept and always returns 0 as the result value. Descendant classes should implement Recv to perform socket read operations appropriate for the socket handler.
Marsh Posté le 21-11-2003 à 18:27:00
Pourquoi t'emploies pas les événements OnWork ?
Marsh Posté le 26-11-2003 à 14:37:36
Voilà mon programme marche bien
j'aurai une petite question lorsque je fais un upload, j'ai plus la main pour les boutons
j'aimerai donner le droit à l'utilisateur d'arrêter l'upload,
il y a une fonction IdFTP->abort() mais comme j'ai pas la main ....
C'est un cercle vicieux!!
Marsh Posté le 26-11-2003 à 14:47:15
Soit tu mets ton composant IdFTP dans un thread, soit tu utilises le composant IdAntiFreeze (ou un truc du genre).
La première solution est meilleure, mais si tu n'as jamais utilisé les threads ...
Marsh Posté le 26-11-2003 à 14:57:26
oui le anti freeze je l'ai utilisé parce que j'avais un bouton qui disparaissait (passait en blanc)
je vais regarder du coté du thread
tiens y a un article sympa dessus
http://chgi.developpez.com/thread/
Marsh Posté le 26-11-2003 à 14:59:06
bon je viens de regarder c'est exactement ce que je veux faire
par contre c'est pas évident
Marsh Posté le 26-11-2003 à 15:49:18
http://forum.hardware.fr/forum2.ph [...] 331&cat=10
Marsh Posté le 14-11-2003 à 15:32:16
le répertoire systeme de windows et la plateforme
je sais que String(Win32Platform) permet de donner la plateforme de manière imprécise (3.1 ,95 ou NT)
En fait, je dois me connecter à un ftp et je lance ftp.exe avec un shellexecute.
Seulement ftp.exe se trouve dans des répertoires différents!
à terme j'aimerai écrire mon programme sans passer par ftp.exe
si vous avez des pistes je suis prenant
---------------
Black List : FABD!!! <-ne pas lui faire confiance!