Nombre de archivo temporal

03/11/2004 - 23:46 por Willser F. González C. | Informe spam
Hola Grupo,

Tengo una DLL que debe llevar un LOG de sus acciones, pero necesito que
cuando el último archivo de LOG supere un tamaño determinado, entonces se
genere un nuevo archivo de LOG con un consecutivo numérico que no exista.

Lo he intentado con la función _tempnam("C:\\", g_csLogFileName), pero
siempre me lo crea en la carpeta apuntada por TMP, y esta variable de
entorno no la puedo eliminar ya que es utilizada por otras aplicaciones. O
puedo deshabilitar esta variable de entorno sólo para la DLL?. Pues en la
ayuda dice que si no exites esta variable o el path a la que apunta,
entonces se tendría en cuenta el directorio especificado en el primer
parámetro de esta función, en este caso "C:\\".

La idea es que me cree el archivo en una carpeta particular. O será que
existe alguna función API o algo más de C++ que me ahorre hacer un ciclo
verificando qué nombre de archivo se puede utilizar?.

Gracias.

Willser F.
willser@latinmail.com

Preguntas similare

Leer las respuestas

#1 Willser F. González C.
04/11/2004 - 00:31 | Informe spam
Como suele suceder, después de la duda se encuentra la respuesta, pero me
surge un inconveniente:

La función API correspondiente es:

UINT GetTempFileName(
LPCTSTR lpszPath,
LPCTSTR lpszPrefix,
UINT uUnique,
LPTSTR lpszTempFile
)

GetTempFileName(Path, "NombreFijo", 0, TempFileName);

Pero siempre me genera el consecutivo en Hexadecimal, y sólo me toma las
tres primeras letras del Prefijo, es decir, "Nom". Así que el nombre final
sería por ejemplo: "Nom8DC.tmp", el siguiente sería: "Nom8DD.tmp".

Cómo podría tener el temporal con el nombre completo del prefijo + el
consecutivo numérico?.

El tercer parámetro (uUnique) es un poco confuso, se puede hacer algo con
este parámetro.

Willser F.
Respuesta Responder a este mensaje
#2 Willser F. González C.
04/11/2004 - 00:49 | Informe spam
Además, siempre me crea el archivo con extensión tmp y lo necesito con otra
extensión, se podría omitir esta creación automática, o tendría que
renombrar el archivo para cambiarle la extensión.

Willser F.
Respuesta Responder a este mensaje
#3 Tonijua
04/11/2004 - 13:43 | Informe spam
Ahi va la ayuda en ingles.
Sin embargo yo creo que tendrias que crear tu propia funcion para generar un
nombre aleatorio, por lo menos eso es lo que yo haria!!


GetTempFileName
The GetTempFileName function creates a name for a temporary file. The file
name is the concatenation of specified path and prefix strings, a
hexadecimal string formed from a specified integer, and the .tmp extension.

The specified integer can be nonzero, in which case, the function creates
the file name but does not create the file. If you specify zero for the
integer, the function creates a unique file name and creates the file in the
specified directory.

UINT GetTempFileName(
LPCTSTR lpPathName, // directory name
LPCTSTR lpPrefixString, // file name prefix
UINT uUnique, // integer
LPTSTR lpTempFileName // file name buffer
);Parameters
lpPathName
[in] Pointer to a null-terminated string that specifies the directory path
for the file name. This string must consist of characters in the ANSI
character set. Applications typically specify a period (.) or the result of
the GetTempPath function for this parameter. If this parameter is NULL, the
function fails.
lpPrefixString
[in] Pointer to a null-terminated prefix string. The function uses the
first three characters of this string as the prefix of the file name. This
string must consist of characters in the ANSI character set.
uUnique
[in] Specifies an unsigned integer that the function converts to a
hexadecimal string for use in creating the temporary file name.
If uUnique is nonzero, the function appends the hexadecimal string to
lpPrefixString to form the temporary file name. In this case, the function
does not create the specified file, and does not test whether the file name
is unique.

If uUnique is zero, the function creates the file in the lpPathName
directory using a unique file name.

lpTempFileName
[out] Pointer to the buffer that receives the temporary file name. This
null-terminated string consists of characters in the ANSI character set.
This buffer should be at least the length, in bytes, specified by MAX_PATH
to accommodate the path.
Return Values
If the function succeeds, the return value specifies the unique numeric
value used in the temporary file name. If the uUnique parameter is nonzero,
the return value specifies that same number.

If the function fails, the return value is zero. To get extended error
information, call GetLastError.

Remarks
The GetTempFileName function creates a temporary file name of the following
form:

path\preuuuu.TMPThe following table describes the file name syntax.

Component Meaning
path Path specified by the lpPathName parameter
pre First three letters of the lpPrefixString string
uuuu Hexadecimal value of uUnique


When the system shuts down, temporary files whose names have been created by
this function are not automatically deleted.

To avoid problems resulting when converting an ANSI string, an application
should call the CreateFile function to create a temporary file.

Windows 95/98/Me: GetTempFileNameW is supported by the Microsoft Layer for
Unicode. To use this, you must add certain files to your application, as
outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.

"Willser F. González C." escribió en el mensaje
news:%
Además, siempre me crea el archivo con extensión tmp y lo necesito con


otra
extensión, se podría omitir esta creación automática, o tendría que
renombrar el archivo para cambiarle la extensión.

Willser F.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida