Aro : antireadonly -> modifier les fichiers en lecture seule en fichier "normaux" (visual c++ 6.0)


Description

Vous pouvez modifier les fichiers en lecture seule en fichiers modifiables...
Très utile pour les fichiers copiés à partir d'un CD ROM.

Source / Exemple :


//ARO par J.M.G.R commencé le 23/06/02 et terminé le 24/06/02
//ARO = AntiReadOnly
//PS : J'ai écrit ce programme en anglais pour que tout le monde puisse l'utiliser... De toute façon vous avez les commentaires...
//J'ai créé ce programme car j'en avait marre que Windows me laisse les fichiers que j'ai copié d'un CD Rom en lecture seule, ce qui gênait la compilation de mes programmes (évidemment)

#include <windows.h>//Pour FindFirstFile, FindNextFile, FindClose, GetCurrentDirectory...
#include <stdio.h>//Pour printf, sprintf
#include <conio.h>//Pour getch

static long NumFiles=0,NumDir=0,NumRO=0,NumErr=0;//Le nombre de :
//Fichier normaux, de dossiers, de fichiers en lecture seule, d'erreurs

void finder(char dir[])//La fonction de recherche de fichier en lecture seule
{
	char temp[256]="";//Chaine temporaire (très utile !)
	printf("Scanning %s...\n",dir);//Bon, les printf je ne met pas de commentaires, je crois que c'est clair...
	WIN32_FIND_DATA find;//Pour le retour de FindFirstFile et FindNextFile
	GetCurrentDirectory(256,temp);//On trouve de dossier de l'exe
	if(!strcmp(dir,"local directory"))//Si le dossier est local (pas d'arguments dans l'exécutable) 
		strcpy(dir,temp);//On met le dossier de l'exe
	printf("%s\n",dir);
	sprintf(temp,"%s\\*.*",dir);//On met dans temp le dossier + *.* pour la recherche (comme pour Outils\Rechercher\Fichiers ou dossiers du navigateur de Windows 98)
	HANDLE fin = FindFirstFile(temp,&find);//On recherche le 1er fichier (toujours .)
	FindNextFile(fin,&find);//On recherche le 2ème fichier (toujours ..)
	for(;;)//Boucle pour trouver les fichiers
	{
		strcpy(temp,find.cFileName);//On met dans temp le fichier trouvé au dernier passage
		FindNextFile(fin,&find);//On trouve le fichier suivant
		if(strcmp(temp,find.cFileName))//Si le fichier précédent est différent du fichier trouvé (pour voir quand il n'y a plus de fichier non trouvé (la fonction FindNextFile répète toujours le même fichier... Oui je sait c'est artisanal.))
		{
			if(find.dwFileAttributes&FILE_ATTRIBUTE_READONLY)//Si le fichier est en lecture seule
			{
				printf("Find read only : %s\n",find.cFileName);
				printf("Set to normal : ");
				sprintf(temp,"%s\\%s",dir,find.cFileName);//On obtient le chemin du fichier
				if(SetFileAttributes(temp,FILE_ATTRIBUTE_NORMAL)!=0)//Si la fonction que le met en mode "normal"
					printf("ok!");//Réussit
				else
				{
					printf("error! (%d)",GetLastError());//Echoue, on prends le code d'erreur
					NumErr++;//Et on incrémente (augmente de 1) le nombre d'erreurs
				}
				printf("\n");
				NumRO++;//On incrémente le nombre de fichiers en lecture seule
			}
			else if(find.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)//Si on trouve un dossier
			{
				printf("Find directory : %s\n",find.cFileName);
				strcpy(temp,dir);
				strcat(temp,"\\");
				strcat(temp,find.cFileName);//On obtient le nouveau chemin avec l'ancien + le nouveau dossier
				printf("Change directory to %s...\n",temp);
				finder(temp);//On appelle la fonction avec pour paramètre le nouveau chemin
				NumDir++;//On incrémente le nombre de dossiers
			}
			else//Sinon c'est un fichier qui n'est pas en lecture seule
			{
				printf("Find normal file : %s\n",find.cFileName);
				NumFiles++;//On incrémente le nombre de fichiers "normaux"
			}
		}
		else//Sinon on a trouvé tout les fichiers
		{
			break;//Et on quitte la boucle
		}
	}
	FindClose(fin);//On ferme le HANDLE pour éviter des erreurs...
}

int main(int argc, char* argv[])//Argc contient le nombre d'arguments et argv les arguments
{
	printf("Anti Read Only 1.0 by J.M.G.R\n");
	printf("Press any key to start scanning process !\n");
	getch();//On attends qu'on appuie sur une touche
	char temp[256];//Temp comme avant
	if(argc>1)//Si il y a un argument
	{
		strcpy(temp,argv[1]);//On copie cet argument qui est le dossier qui doit être scanné
		finder(temp);//On scanne
	}
	else
		finder("local directory");//Sinon on scanne avec pour argument "local directory" qui indiquera à la fonction qu'on veut scanner le dossier de l'exe
	printf("Total : %ld Normal file(s), %ld Directory(ies), %ld Read - Only file(s) and %ld error(s)\n",NumFiles,NumDir,NumRO,NumErr);
	getch();//On attends qu'on appuie sur une touche
	return 0;//On quitte main()
}

Conclusion :


Voila ;)
Pensez à mettre comme argument le dossier à scanner...
ATTENTION ! Il scanne aussi les sous - dossiers !
Merci de lire le fichier A lire.txt :p)

Codes Sources

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.