2017-01-24 3 views
0

Ich bin auf der Suche nach dem Code, wie man einen eindeutigen Dateinamen in der Powerbuilder 11 Version bekommt. Ich benutze die Funktion. Ich verwende den folgenden Code, aber nichtPowerbuilder - um einen eindeutigen Dateinamen zu bekommen

FUNCTION integer GetTempFileName (ref string tempdir, ref string prefix, integer seed, ref string tempfile) LIBRARY "kernel32" alias for "GetTempFileNameW" 

string ls_prefixe = "app" 
integer li_seed = 0 
string ls_filename 
ls_filename = space(256) 

li_rc = GetTempFileName(ls_tempdir, ls_prefixe, li_seed, ls_filename) 
IF li_rc = 0 THEN 
    MessageBox("Oups", "Error") 
ELSE 
    MessageBox("Unique filename", ls_filename) 
END IF 
+0

nur mit dem fehlenden 'int li_rc' und' string ls_tempdir' arbeitet Ihr Code mit meinem PB11. Was funktioniert nicht? Fehlermeldung, Syntaxfehler? – Seki

Antwort

0

Arbeits Dies funktioniert:

Globale Externe Funktion:

FUNCTION integer GetTempFileName (ref string tempdir, ref string prefix, integer seed, ref string tempfile) LIBRARY "kernel32" alias for "GetTempFileNameA;ANSI" 

Code:

integer li_rc 
string ls_tempdir = "c:\temp\" 
string ls_prefixe = "app" 
integer li_seed = 0 
string ls_filename 

ls_filename = space(256) 

li_rc = GetTempFileName(ls_tempdir, ls_prefixe, li_seed, ls_filename) 
IF li_rc = 0 THEN 
    MessageBox("Oups", "Error") 
ELSE 
    MessageBox("Unique filename", ls_filename) 
END IF 
+0

Verwenden der '__; ANSI;' - Funktionen Aliase sollten für Kompatibilitätsprobleme reserviert werden, wenn alte Nicht-Unicode-DLL-Funktionen aufgerufen werden oder wenn alter Pre-10-Legacy-Code wiederverwendet wird. PB verwendet intern 'wide_char'string-Typen seit der Version 10.0 und kann die' __W'-Windows-API-Funktionen verwenden. Bei Verwendung der ANSI-Varianten wird den Aufrufen eine Überladung hinzugefügt, indem die Zeichenfolge zwischen 'char' und' wchar_t' vor und nach den Aufrufen konvertiert wird. – Seki

+0

Nun, es gibt kein Problem, ändern Sie einfach die globale externe Funktion durch folgende: FUNCTION integer GetTempFileName (ref Zeichenfolge tempdir, ref Zeichenfolge Präfix, Integer Seed, ref Zeichenfolge tempfile) LIBRARY "kernel32" Alias ​​für "GetTempFileNameW" –

0

Warum nicht Powerbuilder verwenden zu tun Dies und nicht eine Windows-API? Mit der Randomize-Methode können Sie problemlos Zufallswerte generieren. Da die Ausgabe eine Ganzzahl ist, können Sie mehrere Werte generieren und miteinander verketten.

Beispiel:

String(Randomize(0)) + String(Randomize(0)) 

Dann, dass als Dateinamen verwenden.

+0

Weil es ist Bricolage, um das Rad neu zu erfinden, während das System eine Möglichkeit bieten kann, einen garantierten eindeutigen Dateinamen zu erhalten? Wenn der erste Dateiname aus irgendeinem Grund nicht eindeutig ist, erhöht die API die Seed-Nummer, bis ein wirklich eindeutiger Dateiname erstellt wird. – Seki

+0

Ich habe versucht, Randomize (0) mit meinem Dateinamen zu verwenden, aber es kommt keine Zufallszahl. Aber wenn ich das angegebene Skript verwende, erzeugt es eine eindeutige Nummer – androidpol

Verwandte Themen