Gestion de fichier et dossier + autres

Contenu du snippet

Petit code qui permet de gérer les fichiers et dossiers ainsi que d'autres fonctions.
Je suis débutant, il manque beaucoup de chose mais cela donnera une base pour ceux qui veulent étudier le fonctionnement d'un os. Bien sur quand je parle os il faut relativiser ^^.

Source / Exemple :


#include <string.h>
#include <string>
#include <time.h>
#include "types.h"

using namespace std;

void initArrayRecord(rootDirectory  arrayRecord[1024]);
void initArrayRecord(dataSection arrayRecord[1024]);
char text [512];
int numéro = 99;
int incrementation = 0;
int kb ;
void main()
{

	// la limite de compilation impose une taille raisonnées dans la limite des tableaux
	rootDirectory rootDirectoryArrayRecord[1024]; // tableau enregistrement de rootDirectory
	dataSection dataSectionArrayRecord[1024]; // // tableau enregistrement de dataSection

	char commande[255]; // commande passée

	// initialisation des structures
	initArrayRecord(rootDirectoryArrayRecord);
	while ( strcmp(commande,"exit") != 0 )
	{
		printf("? >");
		gets(commande);
		time_t *h=NULL;
		time_t t;
		if (strcmp(commande,"ver") == 0 )
		{
			printf("version 0.1 \n");

		}
		if (strcmp(commande,"date") == 0 )
		{

			int j = 0;
			char date[255];
			char realDate[255];
			char realYear[5];
			time_t rawtime;
			t = time ( &rawtime );
			sprintf(date,"%s",asctime(localtime(&t)));
			strncpy(realDate,date,10);
			realDate[10] = '\0';
			j=0;
			for (int i  =20 ; i <strlen(date)-1; i++)
			{
				realYear[j] = date[i];
				j++;
			}
			realYear[j] = '\0';
			sprintf(realDate,"%s-%s",realDate,realYear);
			printf("date : %s \n",realDate);

		}
		if (strcmp(commande,"time") == 0 )
		{

			int j = 0;
			char date[255];
			char realHour[255];

			time_t rawtime;
			t = time ( &rawtime );
			sprintf(date,"%s",asctime(localtime(&t)));
			j=0;
			for (int i =11 ; i <20; i++) // prototype  à vérifier pour les positions
			{
				realHour[j] = date[i];
				j++;
			}
			realHour[j] = '\0';
			printf("heure : %s \n",realHour);

		}

		///////////////////////////creation de fichier

		if (commande[0] == 'e' && commande[1] == 'd' && commande[2] == 'i' && commande[3] == 't' )
		{

			char nom[255];
			int j = 0;
			int position;
			int longueur = strlen(commande);
			for (int i = 5; i< longueur; i++)
			{
				nom[j] = commande[i];
				j++;
			}
			nom[j]='\0';
			printf("nom fichier %s \n",nom);
			char extension[4];
			for (int i = 0; i < strlen(nom); i++)
			{
				if ( nom[i] == '.')
				{
					position = i;
					i = 99;
				}
			}
			j= 0;
			for (int i = position+1; i< strlen(nom); i++)
			{
				extension[j] = nom[i];
				j++;
			}
			extension[j]='\0';
			numéro++;
			incrementation ++;
			printf("ext fichier %s \n",extension);
			rootDirectoryArrayRecord[numéro].rdID = numéro;// identifiant 0 à 99 réservés
			strcpy (rootDirectoryArrayRecord[numéro].rdName , nom); // ajout de nom
			strcpy (rootDirectoryArrayRecord[numéro].rdExtension , extension);// extension
			dataSectionArrayRecord[incrementation].dsID , incrementation; /// ID avec varriable incrementation pour le Fichier
			rootDirectoryArrayRecord[numéro].rdFirstSecor , incrementation; /// Id avec varriable incrementation pour l'emplacement du contenu
			rootDirectoryArrayRecord[numéro].rdType = 1;
			printf("Contenu du fichier : \n"); 
			gets(text);
			strcpy(dataSectionArrayRecord[incrementation].dsData , text);  //inserion du contenu dans la section data en recupérant l id
			kb = strlen(text);
			rootDirectoryArrayRecord[numéro].rdSize = kb;
			printf("taille : %d kb\n",kb);
			//insertion du poid en KB avec le nbr de char
			if (strcmp (dataSectionArrayRecord[incrementation].dsData , text) ==0)
			{
				printf("Enregistrement ok\n");
			}
			else  
			{
				printf(" Error de l'enregistrement\n");
			}
			printf("Quelle dossier ?\n");
			/////////recherche du dossier ///////
			gets(text);
			int j1 = 0;
			for (int i = 0; i< 1024; i++)
			{ 
				if (strcmp(rootDirectoryArrayRecord[i].rdName, text) ==0)
				{
					j1=i; //// id du dossier 
					i=1025;
					printf("dossier trouver \n");
					printf("Enregistrement total \n");
				}
				if (i == 1023)
				{
					printf(" Dossier introuvable\n");
					printf(" Enregistrement partielle \n");
				}
			}

			rootDirectoryArrayRecord[numéro].rdParent = j1; //// Le fichier prend la valeur de l id du dossier dans lequelle on l'ajoute

		}

		///////////////////////////////////////////////////////////////////////////////////
		/////////////  Création de dossier ////////////////////

		if (commande[0] == 'm' && commande[1] == 'k' && commande[2] == 'd' && commande[3] == 'i' && commande[4] == 'r')
		{
			numéro ++;
			char nom[255];
			int j = 0;
			int position;
			int longueur = strlen(commande);
			for (int i = 6; i< longueur; i++)
			{
				nom[j] = commande[i];
				j++;
			}
			nom[j]='\0';
			printf("nom dossier %s \n",nom);
			rootDirectoryArrayRecord[numéro].rdID = numéro;// id de rootdirectory
			rootDirectoryArrayRecord[numéro].rdType = 0;
			strcpy (rootDirectoryArrayRecord[numéro].rdName , nom);  /// affectation du nom du dossier
			if (strcmp (rootDirectoryArrayRecord[numéro].rdName , nom)==0)
			{
				printf("Enregistrement ok\n");
				printf("id = %d\n", numéro);
			}
			else  
			{
				printf(" Error de l'enregistrement");
			}

		}
		///////////////////// Dir ////////////////////
		int numero2 =0;
		int IDdossier;
		char name [250];
		char namedossier [250];
		if (strcmp(commande,"dir") == 0 )
		{

			for (int i=99; i< 1024;i++)
			{
				rootDirectoryArrayRecord[i].rdScan = 0;

			}
			for (int i=99; i< 1024;i++)
			{
				if (( rootDirectoryArrayRecord[i].rdScan == 0) && (rootDirectoryArrayRecord[i].rdType == 1 )
					&& (rootDirectoryArrayRecord[i].rdID != 0 )) // si c'est un fichier et qu'il n'a pas ete scan et qu'il a bien un ID

				{
					IDdossier = rootDirectoryArrayRecord[i].rdParent; //recupérartion de l'id du dossier
					strcpy (name , rootDirectoryArrayRecord[IDdossier].rdName);
					printf ("le nom du dossier est %s \n",name);
					//scan des fichier ayant le meme nom que l'association IDname
					for (int y=99; y< 1024;y++)
					{
						if (( rootDirectoryArrayRecord[y].rdScan == 0) && (rootDirectoryArrayRecord[y].rdType == 1 )
							&& (rootDirectoryArrayRecord[y].rdID != 0 ) && (rootDirectoryArrayRecord[y].rdParent == IDdossier))
						{
							strcpy (namedossier , rootDirectoryArrayRecord[y].rdName);
							printf ("   le nom du fichier est %s \n",namedossier);
							rootDirectoryArrayRecord[y].rdScan = 1;
						}
					}

				}

			} 	

		}
		////////////////////// cat ///////////////////////////
		if (commande[0] == 'c' && commande[1] == 'a' && commande[2] == 't')
		{
			numéro ++;
			char nom[255];
			int j = 0;
			int position;
			int longueur = strlen(commande);
			int id;
			int poid;
			int iddossier;
			char nomdossier [250];
			for (int i = 4; i< longueur; i++)
			{
				nom[j] = commande[i];
				j++;
			}
			nom[j]='\0';
			printf("nom fichier %s \n",nom);
			for (int i =99; i<1024; i++)
			{
				if (strcmp(rootDirectoryArrayRecord[i].rdName, nom) ==0)
				{
					id = rootDirectoryArrayRecord[i].rdID;
					printf("id du fichier est %d\n",id);
					poid = rootDirectoryArrayRecord[i].rdSize;
					printf("le poid du fichier est %d kb\n",poid);
					iddossier = rootDirectoryArrayRecord[i].rdParent;
					strcpy(nomdossier , rootDirectoryArrayRecord[iddossier].rdName);
					printf("Il est dans le dossier %s\n",nomdossier);
				}
			}
		}
		////////////////////////////// defrag ////////////////////////////:
		if (strcmp(commande,"defrag") == 0 )

		{
			for (int i = 98; i < 1024;i++)
			{
				if (strcmp (rootDirectoryArrayRecord[i].rdName , "")==0)
				{ 
					char name2 [250];
					char extens [250];
					int sector; // Emplacement du contenu
					int type;
					int size;
					int id;
					int parent;
					int inc =0;
					int j=0;
					j = i;
					while ( strcmp (rootDirectoryArrayRecord[j].rdName , "")==0) // Nombre de place vide aprés l'id 
					{
						j++;
					}
					if ( rootDirectoryArrayRecord[j].rdType == 1) // Travail sur les fichier
					{
						///sauvegardes des valeurs
						strcpy (name2 , rootDirectoryArrayRecord[j].rdName);
						strcpy (extens , rootDirectoryArrayRecord[j].rdExtension);
						sector = rootDirectoryArrayRecord[j].rdFirstSecor;
						type = rootDirectoryArrayRecord[j].rdType;
						size = rootDirectoryArrayRecord[j].rdSize;
						parent = rootDirectoryArrayRecord[j].rdParent;
						///suppresion des donnée
						rootDirectoryArrayRecord[j].rdID  = 0;
						strcpy(rootDirectoryArrayRecord[j].rdName,"");
						strcpy(rootDirectoryArrayRecord[j].rdExtension,"");
						rootDirectoryArrayRecord[j].rdType = 2;
						rootDirectoryArrayRecord[j].rdSize = 0;
						rootDirectoryArrayRecord[j].rdTime = 0;
						rootDirectoryArrayRecord[j].rdDate = 0;
						rootDirectoryArrayRecord[j].rdFirstSecor = 0;
						rootDirectoryArrayRecord[j].rdParent = 0;
						rootDirectoryArrayRecord[j].rdAttrib = 0;
						/// réatribution des données
						rootDirectoryArrayRecord[i].rdID = i;
						strcpy (rootDirectoryArrayRecord[i].rdName , name2);
						strcpy (rootDirectoryArrayRecord[i].rdExtension , extens);
						rootDirectoryArrayRecord[i].rdFirstSecor = sector;
						rootDirectoryArrayRecord[i].rdType = type;
						rootDirectoryArrayRecord[i].rdSize = size;
						rootDirectoryArrayRecord[i].rdParent = parent;
						printf(" le Fichier %s ayant l'id %d a ete déplacer a l'id %d\n",name2,j,i);
					}
					if ( rootDirectoryArrayRecord[j].rdType == 0) // travail sur les dossier
					{
						// sauvegarde des données
						id = rootDirectoryArrayRecord[j].rdID;
						strcpy (name2 , rootDirectoryArrayRecord[j].rdName);
						type = rootDirectoryArrayRecord[j].rdType;
						// suppression des données
						strcpy(rootDirectoryArrayRecord[j].rdName,"");
						type = rootDirectoryArrayRecord[j].rdType;
						//réatribution des données
						rootDirectoryArrayRecord[i].rdID = i;
						strcpy (rootDirectoryArrayRecord[i].rdName , name2);
						rootDirectoryArrayRecord[i].rdType = type;
						printf(" le Dossier %s ayant l'id %d a ete déplacer a l'id %d\n",name2,j,i);
						for (j = 99; j<1024; j++)
						{
							if (rootDirectoryArrayRecord[j].rdParent = id)
							{
								rootDirectoryArrayRecord[j].rdParent = i;
							}
						}
					}

				}
				if (strcmp (dataSectionArrayRecord[i].dsData,"")) ////travail sur les données
				{
					int j;
					int id;
					char contenu2[512];
					j = i;
					while (strcmp (dataSectionArrayRecord[j].dsData ,"")) // Nombre de place vide aprés l'id 
					{
						j++;
					}
					id = dataSectionArrayRecord[j].dsID;
					strcpy (contenu2 , dataSectionArrayRecord[j].dsData);
					//suppresion des données
					dataSectionArrayRecord[i].dsID = 0;
					strcpy(dataSectionArrayRecord[i].dsData,"");
					//reatribution des données
					dataSectionArrayRecord[i].dsID = i;
					strcpy (dataSectionArrayRecord[i].dsData , contenu2);
					for(j=99; j<1024;j++)
					{
						if (rootDirectoryArrayRecord[j].rdFirstSecor == id)
						{
							rootDirectoryArrayRecord[j].rdFirstSecor = i;
						}
					}
				}
			}
		}
		/////////////////////delf///////////////////
		if (commande[0] == 'd' && commande[1] == 'e' && commande[2] == 'l' && commande[3] == 'f' )
		{

			char nom[255];
			int sector;
			int j = 0;
			int position;
			int longueur = strlen(commande);
			for (int i = 5; i< longueur; i++)
			{
				nom[j] = commande[i];
				j++;
			}
			nom[j]='\0';
			for (j =99 ; j<1024; j++)
			{
				if ((strcmp (rootDirectoryArrayRecord[j].rdName , nom)==0) && (rootDirectoryArrayRecord[j].rdType == 1))
				{
					sector = rootDirectoryArrayRecord[j].rdFirstSecor;
					rootDirectoryArrayRecord[j].rdID  = 0;
					strcpy(rootDirectoryArrayRecord[j].rdName,"");
					strcpy(rootDirectoryArrayRecord[j].rdExtension,"");
					rootDirectoryArrayRecord[j].rdType = 2;
					rootDirectoryArrayRecord[j].rdSize = 0;
					rootDirectoryArrayRecord[j].rdTime = 0;
					rootDirectoryArrayRecord[j].rdDate = 0;
					rootDirectoryArrayRecord[j].rdFirstSecor = 0;
					rootDirectoryArrayRecord[j].rdParent = 0;
					rootDirectoryArrayRecord[j].rdAttrib = 0;
					for (int h =99; h<1024; h++)
					{
						if (dataSectionArrayRecord[h].dsID == sector)
						{
							dataSectionArrayRecord[h].dsID = 0;
							strcpy(dataSectionArrayRecord[h].dsData,"");
						}
					}

					printf("effacement ok \n");
				}

			}

		}
		////////////////deld/////////////////////////////
		if (commande[0] == 'd' && commande[1] == 'e' && commande[2] == 'l' && commande[3] == 'd' )
		{

			char nom[255];
			int j = 0;
			int position;
			int longueur = strlen(commande);
			int type;
			for (int i = 5; i< longueur; i++)
			{
				nom[j] = commande[i];
				j++;
			}
			nom[j]='\0';
			for (j =99 ; j<1024; j++)
			{
				if ((strcmp (rootDirectoryArrayRecord[j].rdName , nom)==0) && (rootDirectoryArrayRecord[j].rdType == 0))
				{

					strcpy(rootDirectoryArrayRecord[j].rdName,"");
					type = rootDirectoryArrayRecord[j].rdType;
					///////////////////////////////////////////////////fdvf
					printf("effacement ok \n");
				}
			}
		}

		//////////////////////////////////////////////////////

	
		if (strcmp(commande,"drspace") == 0 )
		{

			if (rootDirectoryArrayRecord[0].rdType == ' ')
			{
				printf("Drive empty, 100%% free \n");
			}
		}
		if (strcmp(commande,"?") == 0 || strcmp(commande,"help") == 0 || strcmp(commande,"man") == 0)
		{

			printf("VER \n DATE \n TIME \n DIR \n CAT \n EDIT nomfichier.extension Le nom est limité à 11 caractères, l'extension à 4 caractères \n DEL \n MKDIR \n RMDIR \n DEFRAG \n REPACK \n CP \n ECHO \n DRSPACE \n FORMAT \n CD \n CLS \n help : manuel \n ? : manuel \n man : manuel \n");
		}

	}
}

void initArrayRecord(rootDirectory arrayRecord[1024])
{
	for (int i = 0 ; i < 1024; i++)
	{
		arrayRecord[i].rdID  = 0;// identifiant 0 à 99 réservés
		strcpy(arrayRecord[i].rdName,"");
		strcpy(arrayRecord[i].rdExtension,"");
		arrayRecord[i].rdType = 2;
		arrayRecord[i].rdSize = 0;
		arrayRecord[i].rdTime = 0;
		arrayRecord[i].rdDate = 0;
		arrayRecord[i].rdFirstSecor = 0;
		arrayRecord[i].rdParent = 0;
		arrayRecord[i].rdAttrib = 0;
		arrayRecord[i].rdScan = 0;
	}
}
void initArrayRecord(dataSection arrayRecord[1024])
{
	for (int i = 0 ; i < 1024; i++)
	{
		arrayRecord[i].dsID = 0;
		strcpy(arrayRecord[i].dsData,"");
		arrayRecord[i].dsPrev = 0;
		arrayRecord[i].dsNext = 0;
	}
}

Conclusion :


Fait en cour en IG1 à godefroy de bouillon 63000

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.