Maintenant, j'ai un fichier avec beaucoup de données. Et je sais que les données dont j'ai besoin commencent à position (long) x et ont une taille donnée sizeof (y) Comment puis-je obtenir ces données?C++ Comment lire des objets avec un décalage donné?
Répondre
Utilisez la méthode seek
:
ifstream strm;
strm.open (...);
strm.seekg (x);
strm.read (buffer, y);
Vous devez utiliser fseek() pour modifier votre "position actuelle" dans le fichier au décalage souhaité. Donc, si « f » est votre fichier variable * et le décalage est le décalage c'est de savoir comment l'appel devrait ressembler (modulo ma mémoire qui fuit):
fseek(f, offset, SEEK_SET);
ajouter un fread pour la partie "comment puis-je obtenir ces données". – Tom
Outre les techniques habituelles de recherche et de lecture mentionnées ci-dessus, vous pouvez également mapper le fichier dans votre espace de processus en utilisant quelque chose comme mmap() et accéder directement aux données.
Par exemple, étant donné le fichier de données suivantes "de foo.dat":
one two three
Le code suivant imprime tout le texte après les quatre premiers octets en utilisant une approche basée mmap():
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <iostream>
int main()
{
int result = -1;
int const fd = open("foo.dat", O_RDONLY);
struct stat s;
if (fd != -1 && fstat(fd, &s) == 0)
{
void * const addr = mmap(0, s.st_size, PROT_READ, MAP_PRIVATE, fd, 0);
if (addr != MAP_FAILED)
{
char const * const text = static_cast<char *>(addr);
// Print all text after the first 4 bytes.
std::cout << text + 4 << std::endl;
munmap(addr, s.st_size);
result = 0;
}
close(fd);
}
return result;
}
Vous pouvez même utiliser cette approche pour écrire directement dans un fichier (n'oubliez pas de msync() si nécessaire).
Les bibliothèques comme Boost et ACE fournissent de belles encapsulations C++ pour mmap() (et la fonction Windows équivalente).
Cette approche est probablement excessive pour les petits fichiers, mais elle peut être énorme pour les gros fichiers. Comme d'habitude, profilez votre code pour déterminer quelle approche est la meilleure.
- 1. LinqToSQL - lire des objets Hiérarchie avec seulement certaines propriétés
- 2. Comment trouver quels objets un CLSID donné soutient
- 3. C# Comment écrire un octet à un décalage?
- 4. Lire Pdf avec C
- 5. Lire un fichier avec des données
- 6. Comment lire un xsd: dateTime avec msxml?
- 7. Comment écrire/lire des bits de/vers un flux? (C#)
- 8. Comment lire un fichier csv avec python
- 9. Comment lire json avec XmlReader
- 10. Comment utiliser un framework personnalisé avec des objets dans JQuery
- 11. Comment retourner des objets personnalisés avec WebServices
- 12. Objets mocking contenant des sous-objets avec des jacquements Rhino
- 13. Comment obtiendriez-vous les objets Sql Command pour un TableAdaptor donné et SqlDataAdaptor en C# (.NET 2.0)
- 14. Lire des images PPM dans C
- 15. objets avec des arguments et tableau
- 16. Comment supprimer des entrées dans un dictionnaire avec un drapeau donné en python?
- 17. Comment ajouter facilement des objets CGPoint à un NSArray?
- 18. Comment appeler une méthode générique avec un objet Type donné?
- 19. Comment créer dynamiquement et lire des structures en C?
- 20. Comment lire des fichiers Flash en C pur?
- 21. comment lire un fichier
- 22. Comment marquer des doublons dans un groupe donné dans MySQL?
- 23. Comment lire une caméra vidéo dans un programme win32 C
- 24. coulée produisant des objets const en C++
- 25. décalage de bits confusion en C#
- 26. Problèmes de sérialisation des objets DBML C#
- 27. C# Classement des objets, critères multiples
- 28. Lire des fichiers WordPerfect avec Python?
- 29. Quel programme crée un tableau C donné à un fichier?
- 30. Créer un nouveau LINQ aux entités Objets avec des associations
@shevron, ces objets sont-ils conservés sur le disque? Ou juste un fichier contenant des données que vous voulez lire? –