Ecriture sur le disque

tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010 - 9 mai 2010 à 19:36
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010 - 13 mai 2010 à 12:11
Bonjour,

Je voudrais savoir s'il existe des fonctions permettant d'écrire des données directement sur le disque dur au niveau des cases mémoires. C'est dans le cas d'un effacement sécurisé de données.

Je m'en remet à vous.

15 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
9 mai 2010 à 21:10
Des cases mémoire dans un DD ? Existe pas. Tu parles probablement de clusters, mais pas question de les manipuler directement. Réécris plusieurs fois le fichier avec à peu près n'importe quoi et il n'y aura plus aucun moyen de retrouver son contenu.
---
VB.NET is good ... VB6 is better
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
10 mai 2010 à 19:52
Justement est ce que la fonction fwrite écrit a l'emplacement du fichier ouvert? Parce que s'il ne réécris pas par dessus les donnes ça ne sert a rien.
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 mai 2010 à 20:03
Oui, bien-sûr.
Ton programme doit donc être sous la forme :
fopen() pour ouvrir le fichier.
POUR i ALLANT DE 1 à 10
fwrite() pour écrire dans le fichier.
fseek() pour remettre le curseur au début du fichier.
FIN POUR
fclose() pour fermer le fichier.

Reste à vérifier que fwrite() écrit directement dans le fichier et ne met pas en cache. Pour ça fais un petit programme en C qui écrit et qui attend l'appui d'une touche pour fermer le fichier. Il te suffit de regarder le contenu du fichier avec un autre programme et de regarder s'il a changé.
---
VB.NET is good ... VB6 is better
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
10 mai 2010 à 21:42
J'essairai quand j'en aurai l'occasion mais j'ai une autre question, si je veux réécrire sur l'espace disque libre afin d'empêcher toute récupération de fichiers supprimes avec la corbeille,comment dois-je m'y prendre étant donner que je n'ouvre aucun fichier? C'est pour ça que j'ai fait référence a des adresses mémoires pour s'y repérer, mais c'était plus une idée.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
10 mai 2010 à 23:44
Regarde le code-source de Bcwipe, un programme open-source permettant de faire ce que tu désires sous Windows. Le site : http://www.jetico.com/download/
---
VB.NET is good ... VB6 is better
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
11 mai 2010 à 20:20
Bonjour,

j'ai testé pour fwrite. j'ai mis le programme juste après l'écriture et avant fclose. et en regardant dans mon fichier texte, celui ci a bien subie la modification. J'ai alors essayé de faire une deuxieme ecriture juste apres un fseek et avant fopen mais la il ne le prend pas en compte. Voici le code :
    FILE *fichier = fopen("test.txt", "r+");
    char *tab = "petit";
    char *tab2 = "free";
    fwrite( tab, 1, 5, fichier);
    fseek(fichier, 0, SEEK_SET);
    fwrite( tab2, 1, 4, fichier);
    system("pause");
    fclose(fichier);
    return 0;


Quant au code source, je sais pas si je vais arriver à le déchiffrer, mais j'essaierai.
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
11 mai 2010 à 22:42
De mon côté ton code fonctionne. L'erreur venait du fait que le fichier n'existait pas avant le lancement du programme.
---
VB.NET is good ... VB6 is better
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
11 mai 2010 à 23:18
Comment ça n'existait pas ? J'ai bien créer la fichier txt, et la preuve c'est que le premier fwrite fonctionne mais le deuxieme ne fait rien...
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
11 mai 2010 à 23:21
En ce qui me concerne ça marche ... essaie de mettre le mode d'ouverture à w+ .
---
VB.NET is good ... VB6 is better
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
12 mai 2010 à 12:30
J'avoue que là je suis tout à fait déconcerté. J'ai compilé le code dans un nouveau projet et bizarement ca marche. Etrange vraiment alors que l'ancien projet ne marche pas, même apres un rebuild.
Ensuite cette fois, le fichier n'est édité qu'après le fopen...
int main()
{
    FILE *fichier = fopen("test.txt", "r+");
    char *chaine = "read";
    char *chaine2 = "free";
    fwrite(chaine, 1, 4, fichier);
    system("pause"); // Le fichier n'est pas modifié
    fwrite(chaine2, 1, 4, fichier);
    system("pause"); // Le fichier n'est toujours pas modifié

    fclose(fichier);
// A la fin de l'execution le fichier est modifié...
    return 0;
}
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
12 mai 2010 à 12:32
Désolé de double poster comme cela, mais je me rends compte que j'ai dit fopen alors que c'était apres le fclose. De plus je ne trouve pas le bouton pour réediter mon post.

Encore désolé.
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 mai 2010 à 15:25
Quand j'ai testé ton code, fichier= =NULL.
Essaie avec le mode d'ouverture w+ :
#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE *fichier  = fopen("test.txt", "w+");
    char *chaine = "read-";
    char *chaine2 = "free";

    fwrite(chaine, 5, 1, fichier);
fseek(fichier,0,SEEK_SET);
    fwrite(chaine2, 4, 1, fichier);
    system("pause");

    fclose(fichier);
    return 0;
}

---
VB.NET is good ... VB6 is better
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
12 mai 2010 à 17:51
Bon je comprends il n'a pas écrit sur le fichier avec le précédent code source. Je crois que ça vient de Fseek, il permet l'écriture sur le fichier.

Est-ce que cela pose problème pour l'effacement sécurisé ? Je réécris bien par dessus le fichier et non autre part ?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 mai 2010 à 18:01
fseek() permet de positionner le pointeur de fichier.
Pour l'effacement, je ne sais pas s'il réécrit où s'il utilise une autre zone.
---
VB.NET is good ... VB6 is better
0
tony261193 Messages postés 9 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 13 mai 2010
13 mai 2010 à 12:11
Pour le cache, dans le code de BCWipe, il y a la fonction setvbuf qui permet de désactiver le buffer. Je pense que c'est comme cela qu'on fait la réécriture. Cependant je n'ai pas encore déchiffré la partie pour l'effacement de l'espace libre.
0
Rejoignez-nous