Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour,
Je cherche s'il existe une fonction PB 6.5, permettant de copier un fichier (texte),
qui ne soit pas visible par les utilisateurs et sans utiliser une fonction Windows.
Mon environnement étant hétérogène au niveau des SI et ayant des gros soucis de réseau,
j'ai besoin de rapatrier en local, de façon temporaire, un fichier de données.
J'ai bien trouvé les différentes fonctions FileExists(), FileDelete() mais pas de quoi copier le fichier
sans passer par SaveAs
En vous souhaitant une bonne rentrée, merci.
Hors ligne
Bonjour,
Juste une question: Pourquoi ne veux-tu pas utiliser une datastore avec les fonctions ImportFile et SaveAs?
Hors ligne
FileCopy ( sourcefile, targetfile {, replace } ) ?
Hors ligne
importe ton fichier dans un dw externe puis fait un saveas de ta dw
Oups pardon Foon
Dernière modification par JCZ (29-08-2007 11:25:09)
Hors ligne
JCZ a écrit:
Oups pardon Foon
Pas grave.
La solution d'eRaSorZ est meilleure car plus directe
(et aussi, vu que cdtit semble ne pas vouloir utiliser saveas )
Hors ligne
Merci de vos réponses;
la fonction FileCopy() ne semble pas être dispo en 6.5 (ok en 10.5)
Je ne suis pas oposé au saveas, j'aurais voulu eviter de manipuler les données lors de la copie.
Dernière modification par cdtit (29-08-2007 11:57:16)
Hors ligne
cdtit a écrit:
Je ne suis pas oposé au saveas, j'aurais voulu eviter de manipuler les données lors de la copie.
Avec une simple datastore external dans laquelle tu mets un champ "dummy", tu n'auras aucune manip
de données à faire et tout sera transparent pour l'utilisateur (surtout avec un simple fichier texte)
Hors ligne
foon a écrit:
Avec une simple datastore external dans laquelle tu mets un champ "dummy", tu n'auras aucune manip
de données à faire et tout sera transparent pour l'utilisateur (surtout avec un simple fichier texte)
que veux tu dire par "dummy" ?
Hors ligne
Un simple champ de type alphanumérique et de grande taille (genre string de 2000 par exemple) qui sera destiné à recevoir les lignes de ton fichier de données lors de l'import....
Il faut évidemment qu'il soit suffisamment grand pour que chaque ligne de ton fichier de données puisse y être importée sans problème.
Hors ligne
Le FileCopy est apparu en 7.
En 6.5 on utilisait un bon vieux FileOpen FileRead FileWrite par paquet de 32Ko (à coder une seule fois dans un bel objet uo_file) ou l'appel à l'API window CopyFileA ou run('copy ' + file1 + ' ' + file2).
La belle époque !
Au fait depuis FileCopy existe dans
PB 7
PB 8
PB 9
PB 10
PB 10.5
PB 11
Hors ligne
Chrnico a écrit:
Le FileCopy est apparu en 7.
En 6.5 on utilisait un bon vieux FileOpen FileRead FileWrite par paquet de 32Ko ou l'appel à l'API window CopyFileA ou run('copy ' + file1 + ' ' + file2).
La belle époque !
Le problème c'est que je dois traiter des fichiers de plusieurs dizaines de milliers de lignes, à partir d'un poste client vers un serveur avec un reseau bof; pour aller alimenter la BDD sur un autre serveur !
En plus je compile PB 6.5 sur un poste NT4 pour des applis deployées sur des postes W2K ou XP ...
les bon vieux FileOpen, FileRead donnent des temps de traitement qui frolent l'heure et les API windows
ont été modifiées depuis NT4, donc probleme quand tu les appels avec l'ancienne syntaxe sous W2K.
Et j'ai toujours pas compris comment ils avaient réussi à installer les applis sous XP
Bon sinon, j'ai testé ImportFile et SaveAs; manifestement j'ai un problème sur le chemin d'accès au fichier par le réseau, le SaveAs me renvoie -1 que je lui passe 'c:\test.txt' ou '\\nom_machine\c\test.txt'
Hors ligne
cdtit a écrit:
...les bon vieux FileOpen, FileRead donnent des temps de traitement qui frolent l'heure ..
Tu as ouvert ton fichier en mode Stream ?
Si ton réseau est bof, inutile de te fatiguer tes performanes seront bof elles aussi.
A ta place, je n'écrirai pas un programme pour ça, mais exigerait que mes fichiers atterrissent directement sur mon serveur de base de données
Hors ligne
cdtit a écrit:
Bon sinon, j'ai testé ImportFile et SaveAs; manifestement j'ai un problème sur le chemin d'accès au fichier par le réseau, le SaveAs me renvoie -1 que je lui passe 'c:\test.txt' ou '\\nom_machine\c\test.txt'
Tu as vérifié que le répertoire auquel tu essayes d'accéder sur le réseau est bien partagé?
Hors ligne
shahin a écrit:
cdtit a écrit:
...les bon vieux FileOpen, FileRead donnent des temps de traitement qui frolent l'heure ..
Tu as ouvert ton fichier en mode Stream ?
Si ton réseau est bof, inutile de te fatiguer tes performanes seront bof elles aussi.
A ta place, je n'écrirai pas un programme pour ça, mais exigerait que mes fichiers atterrissent directement sur mon serveur de base de données
Le prog est ecris depuis quelques années maintenant, et avait été dimentionné ad hoc pour un certain volume de données. Là ils font X10 et se demandent pourquoi ça rame.
Quand à exiger quoi que ce soit, je bosse tjs en 6.5, NT4, x86 et 128 de RAM, tu vois le genre.
Comme dis mon client, "avec lui je positive"
Dernière modification par cdtit (29-08-2007 14:41:33)
Hors ligne
foon a écrit:
cdtit a écrit:
Bon sinon, j'ai testé ImportFile et SaveAs; manifestement j'ai un problème sur le chemin d'accès au fichier par le réseau, le SaveAs me renvoie -1 que je lui passe 'c:\test.txt' ou '\\nom_machine\c\test.txt'
Tu as vérifié que le répertoire auquel tu essayes d'accéder sur le réseau est bien partagé?
il n'y a pas de pb de ce coté là d'autant plus que je voudrais copier le fichier en local sur le c:\
le ImportFile est ok, donc j'importe bien les données du serveur distant dans mon appli en local;
c'est le SaveAs qui plante
Hors ligne
Ok, mais encore une fois :
FileOpen ( filename , StreamMode!, Read!)
Hors ligne
Pourrais-tu envoyer ton script PB sur lequel on voit le SaveAs?
Sinon, si c'est pour le sauvegarder sur C: de ta machine, ça ne devrait pas poser de problème, sauf si elle est configurée avec un accès en écriture sur le C: autorisé uniquement pour les profils admin
Hors ligne
Pardon,
non j'ouvre en linemode!, read!, lockread!
Hors ligne
cdtit a écrit:
Bon sinon, j'ai testé ImportFile et SaveAs; manifestement j'ai un problème sur le chemin d'accès au fichier par le réseau, le SaveAs me renvoie -1 que je lui passe 'c:\test.txt' ou '\\nom_machine\c\test.txt'
as-tu essayé en mappant un lecteur réseau, par exemple R: = \\nom_machine\c puis en appelant R:\test.txt ?
Hors ligne
foon a écrit:
Pourrais-tu envoyer ton script PB sur lequel on voit le SaveAs?
Sinon, si c'est pour le sauvegarder sur C: de ta machine, ça ne devrait pas poser de problème, sauf si elle est configurée avec un accès en écriture sur le C: autorisé uniquement pour les profils admin
le script c'est pas compliqué =>
long cl_i string cs_null Datastore ds_file ds_file Create Datastore ds_file.DataObject = 'ds_import' SetNull(cs_null) cl_i = ds_file.ImportFile(cs_null) cl_i = ds_file.SaveAs("c:\test.txt")
Dans le cas du saveas, cl_i = - 1
Hors ligne
faut preciser le type de SaveAs que tu veux, c'est peut-être juste ça non ? genre
dw_1.SaveAs("c:\test.txt",Text!,False)
Hors ligne
cdtit a écrit:
foon a écrit:
Pourrais-tu envoyer ton script PB sur lequel on voit le SaveAs?
Sinon, si c'est pour le sauvegarder sur C: de ta machine, ça ne devrait pas poser de problème, sauf si elle est configurée avec un accès en écriture sur le C: autorisé uniquement pour les profils adminle script c'est pas compliqué =>
long cl_i
string cs_null
Datastore ds_file
ds_file Create Datastore
ds_file.DataObject = 'ds_import'
SetNull(cs_null)
cl_i = ds_file.ImportFile(cs_null)
cl_i = ds_file.SaveAs("c:\test.txt")
Dans le cas du saveas, cl_i = - 1
Dans l'importFile, il faut que tu passe le chemin d'accès de ton fichier à importer, pas NULL
Hors ligne
Hors ligne
foon a écrit:
cdtit a écrit:
cl_i = ds_file.SaveAs("c:\test.txt")
[/c]
Dans le cas du saveas, cl_i = - 1Dans l'importFile, il faut que tu passe le chemin d'accès de ton fichier à importer, pas NULL
ça gene en rien le saveas ça si ?
Hors ligne
Mr Pink Eyes a écrit:
ça gene en rien le saveas ça si ?
Ben, c'est juste qu'il n'y a rien dans la datastore, donc il n'a rienà sauvegarder, d'où le -1
Hors ligne