2009-04-07 9 views
3

Il existe certains outils standard pour cela, mais j'ai besoin d'une interface graphique simple pour aider certains utilisateurs (sous Windows). Ils obtiendront une boîte de dialogue ouverte et choisiront le fichier à traiter.Recherche en ligne efficace et remplacement pour le fichier volumineux

Le fichier sera un fichier XML. Le fichier contiendra (dans les premières lignes) une chaîne de texte qui doit être supprimée ou remplacée par des espaces (peu importe laquelle).

Le problème est que le fichier XML est gros de plusieurs gigaoctets, mais la chaîne de recherche et de remplacement fixe se produira dans les 4 premiers k environ. Quelle est la meilleure façon d'écraser la chaîne de recherche et de sauvegarder sur place sans avoir à lire la totalité de la chaîne en mémoire et à trop écrire sur le disque?

+0

Sur le S & R réel. Existe-t-il une API standard pour cela? Cela semble inutile d'en écrire un à partir de rien. –

+0

LPTSTR StrStr ( LPCTSTR lpPremière, LPCTSTR lpSrch ); Devine que j'essaierai de faire ça. Pas du tout familier avec les fenêtres ... –

Répondre

1

De toute évidence, le remplacement par des espaces blancs de sorte que la taille du fichier ne change pas est le meilleur choix ici, sinon vous devez parcourir tout le fichier pour le mettre à jour sur le disque.

Si c'était pour un environnement Unix, je voudrais utiliser mmap() pour mapper une partie appropriée du début du fichier dans la RAM, puis l'éditer sur place et être fait.

This snippet montre comment utiliser l'équivalent Win32, la fonction CreateFileMapping().

+0

Merci. Je suppose que la fonction CFM() permet de mapper seulement un fichier partiel dans la RAM et que le système d'exploitation va gérer le reste. Je vais regarder dedans. –

0

Vous pouvez facilement écrire votre propre outil. Si c'est au tout début, alors n'importe quelle approche de force brute fonctionnera. Continuez simplement à scanner jusqu'à ce que vous le trouviez. Toutefois, éviter de nombreuses écritures sur disque n'est possible que si vous ne modifiez pas la taille du fichier. Si vous souhaitez supprimer ou insérer des octets quelque part au milieu, vous devrez remplacer tous ceux qui les suivent. Ce qui dans votre cas serait pratiquement tout le fichier. Vous devrez donc le remplacer par des espaces. Tant que vous remplacez un octet par un autre, il n'y aura pas de surcharge.

Questions connexes