IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

ecrire à un endroit précis du disque.


Sujet :

Windows

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut ecrire à un endroit précis du disque.
    Je cherche un moyen de créer un fichier a un endroit précis du disque sous XP. (je développe en C++)

    En fait mon idée est d'utiliser IFsuAsync (en cours d'étude) pour déceller un bloc non fragmenté et libre sur le disque, puis de forcer la création d'un fichier à se faire au début de ce bloc. (et meme idealement je voudrai pouvoir vérifier que ce fichier n'est pas "cassé").

    Pour ce qui est de retrouver des infos concernant la fragmentation du disque, j'arrive a trouver des infos, mais pour ce qui est de la creation du fichier, je ne trouve rien

    Avez vous deja trouvé une solution dans ce sens?
    Toute idée pour m'aider à trouver cette info est la bienvenue.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    je crois avoir une piste avec DeviceIoControl

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    la vraie question est "Pourquoi as-tu besoin absolument d'écrire à un endroit particulier du disque" ?

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    pour faire de l'acquisition video tres rapide (100Mo/s) c'est sur du RAID 0
    d'apres les tests d'un collegue, si le fichier tape dans des zones fragmentées, comme tu t'en doute, les perfs s'écroulent totalement.

    Donc:

    1) on va rechercher un bloc non fragmenté suffisemment grand pour faire l'acquisition (ca, ca n'est pas trop sorcier a premiere vue)

    2) on veut se donner la garantie, que le fichier sera bien créé dans ce bloc.

    DeviceIoControl est tres interressant, mais visiblement tres peu de gens l'utilisent, et c'est tres mal documenté (enfin trop vaste, et du coup pas assez documenté) dans MSDN Je continue mes recherches...

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 578
    Points
    41 578
    Par défaut
    Hum... J'ai pas mal bossé avec DeviceIoControl et la fragmentation pendant mon stage (et ça remonte à deux semaines à peine) Mais si j'ai trouvé/développé (FSCTL_GET_VOLUME_BITMAP + Fonctions pour regarder dedans) le moyen de dresser une liste des espaces libres sur le disque, je n'ai rien trouvé pour forcer l'écriture dans une zone particulière...

    ce que sait faire DeviceIoControl(), c'est déplacer un fichier dans la partition (par contre, il le fait plutot lentement, le code FSCTL_MOVE_FILE étant très mal optimisé...)

  6. #6
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par giova_fr
    pour faire de l'acquisition video tres rapide (100Mo/s) c'est sur du RAID 0
    d'apres les tests d'un collegue, si le fichier tape dans des zones fragmentées, comme tu t'en doute, les perfs s'écroulent totalement.
    c'est pas à toi de gérer ça, mais au système de fichiers.

    Donc:

    1) on va rechercher un bloc non fragmenté suffisemment grand pour faire l'acquisition (ca, ca n'est pas trop sorcier a premiere vue)

    2) on veut se donner la garantie, que le fichier sera bien créé dans ce bloc.
    a ma connaissance aucun OS ne permet de créer un fichier sur un secteur donné. Au contraire, ça favoriserait la fragmentation en laissant les applis créer n'importe où.

    DeviceIoControl est tres interressant, mais visiblement tres peu de gens l'utilisent, et c'est tres mal documenté (enfin trop vaste, et du coup pas assez documenté) dans MSDN Je continue mes recherches...
    DeviceIoControl en elle même est bien documentée, et c'est une fonction tout bête : elle envoie un message à un driver. La réponse à ce message est donc spécifique a chaque driver, et à chaque message. C'est donc au niveau du driver qu'il faut rechercher de la documentation (sur ses IOCTL supportés).

  7. #7
    Inactif  

    Homme Profil pro
    Ingénieur test de performance
    Inscrit en
    Décembre 2003
    Messages
    1 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur test de performance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 986
    Points : 2 605
    Points
    2 605
    Par défaut
    Citation Envoyé par giova_fr
    pour faire de l'acquisition video tres rapide (100Mo/s) c'est sur du RAID 0
    Je ne sais pas si tu parles de raid logiciel ou de raid matériel. Mais si c'est du raid matériel (quoique même du raid logiciel si tu n'a pas les sources), je comprends pas trop la manip.

    Tu veux écrire à un endroit précis du disque, alors que derrière tout ça tu as un système RAID 0 qui pilote les deux disques.

    Je n'ai qu'une chose à dire:

    "Le dormeur doit se réveiller", ou alors "faut redescendre sur terre"...

    La plupart des RAID ne fragmente pas les fichiers, ce n'est pas windows qui écrit sur le disque! De plus pour un RAID 0, les données sont écrites sur les deux disques durs pour optimisation. Mais peut-être que tu penses faire mieux que le RAID...

  8. #8
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Ma proposition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    HANDLE hPhysicalDrive = CreateFile("\\\\.\\PhysicalDrive0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE,
    0, OPEN_EXISTING, 0, 0 );
    Puis utiliser ReadFile() et WriteFile() pour lire/écrire.
    Serait-ce aussi simple que ça ?

    Maintenant, sur le fond : pour faire de la capture rapide, j'utiliserai une partition dédiée...mais vous êtes libre.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Tu accèdes au disque dur tout entier. Si celà t'es autorisé, c'est effectivement un moyen très simple de perdre tout le contenu du disque dur.

  10. #10
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    J'ai eu une idée hier soir en rentant chez moi.

    ok on ne peut pas créer un fichier où on veut.

    Mais on peut avoir une image du disque (FSCTL_GET_VOLUME_BITMAP)

    et on peut déplacer un fichier à un endroit précis (il me semble avoir lu ca, je vais me repencher dessus).

    Donc l'idée, c'est créer un ptit fichier, trouver un gros bloc libre, déplacer le fichier a son début.

    pour le reste inchala

  11. #11
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 753
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 753
    Points : 10 704
    Points
    10 704
    Billets dans le blog
    3
    Par défaut
    Crée plutot un sparse file (SetFilePointer + SetEndOfFile) et laisse l'OS faire la manip.
    http://msdn.microsoft.com/library/en-us/fileio/fs/sparse_files.asp
    Impose l'utilisation de NTFS. Si ça suffit pas, c'est pas avec tes bidouilles que tu vas changer les choses. Faudra plutôt penser à créer une partition réservée à ton logiciel.
    Et comme on te l'a dit plus haut, avec le raid, ça change la donne.

  12. #12
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Merci pour toutes ces infos.

    Bien evidemment l'acquisition se fait sur une "partition" dédié, mais le client que l'on livre fera beaucoup d'acquisition, des longues, des moins longues, certaines qu'il efface, d'autre pas... bref, on ne peut pas l'empecher de fragmenter le disque, meme si on va tenter de l'éduquer...

    Merci encore.

Discussions similaires

  1. ecrire à un endroit précis d'un .doc
    Par virginie2009 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 16/07/2008, 19h37
  2. Fichier + ecrire à un endroit précis
    Par fraisa1985 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 19/03/2008, 14h22
  3. Ecrire à un endroit précis d'un fichier texte
    Par sisco97 dans le forum Langage
    Réponses: 6
    Dernier message: 27/04/2007, 19h44
  4. Ouvrir et ecrire à un endroit précis
    Par titor dans le forum Entrée/Sortie
    Réponses: 5
    Dernier message: 04/11/2006, 19h31
  5. Ecrire à un endroit précis dans un fichier texte
    Par zemeilleurofgreg dans le forum Delphi
    Réponses: 4
    Dernier message: 26/06/2006, 21h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo