Retours à la ligne : unix => windows

Description

Un petit code pas bien complexe mais dont j'avais besoin donc j'en fait profiter tout le monde.

Il permet de remplacer dans un fichier les retours à la ligne de chez unix (\n) par ceux que l'on retrouve sous windows(\r\n).

En plus c'est pas très fonctionnel parce qu'il n'y a pas de fonction parcourir pour trouver le fichier à étudier.

Commentaires constructifs bienvenus.

Chouchou

Source / Exemple :


BOOL Convertir(char* src, char* dst)
{
	// On vérifie que l'utilisateur a bien rentré deux noms pour les fichiers
	if ( !strcmp(src, "") )
	{
		MessageBox(0, "Il faut rentrer le nom du fichier source", 0, 0) ;
		return 1 ;
	}

	if ( ! strcmp(dst, "") )
	{
		MessageBox(0, "Il faut rentrer le nom du fichier de destination", 0, 0) ;
		return 1 ;
	}

	// On ouvre le fichier source
	FILE*	pFile ;
	char*	ctmp ;

	if ( NULL == ( pFile = fopen(src, "r") ) )
	{
		MessageBox(0, "Le fichier source n\'existe pas", 0, 0) ;
		return 1 ;
	}

	// On récupère la taille du fichier
	size_t taille ;
	fseek(pFile, 0, SEEK_END) ;
	taille = ftell(pFile) ;
	rewind(pFile) ;

	ctmp = new char[taille] ;

	// Lecture du fichier pour le stocker dans un tableau
	fread(ctmp, sizeof(char), taille, pFile ) ;

	// En fin de traitement, on ferme le fichier
	fclose(pFile) ;

	char* FinalFile = new char[2 * taille] ; // C'est trop mais ca évite de calculer la taille exacte

	// On recopie le tableau en insérant \r avant chaque \n
	unsigned posSrc, posDst ;
	for ( posSrc = 0, posDst = 0 ; posSrc < taille ;  )
	{
		if ( ctmp[posSrc] == '\n' )
		{
			FinalFile[posDst++] = '\r' ;
			FinalFile[posDst++] = '\n' ;
			posSrc++ ;
		}
		else
			FinalFile[posDst++] = ctmp[posSrc++] ;
	}

	// Pour finir on copie le tableau sur le disque

	if ( NULL == ( pFile = fopen(dst, "w+") ) )
	{
		MessageBox(0, "Impossible de créer le fichier de destination", 0, 0) ;
		return 1 ;
	}

	fwrite(FinalFile, sizeof(char), posDst, pFile) ;

	// On ferme le fichier
	if ( pFile != NULL ) fclose(pFile) ;

	return 0 ;
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.