2010-12-10 56 views
1

Avoir quelques problèmes avec mon programme de copie qui crée une copie d'un fichier utilisateur entre. J'ai décidé de ne pas utiliser la structure (size_t) à la place juste assigné (int) et (char) des types de variables donc je connais la valeur exacte des octets à read() out. c'est-à-dire que je sais commencer au début du fichier et lire 4 octets (int) pour obtenir la valeur de longueur du nom de fichier, que j'utilise comme taille dans read()c la programmation des fichiers de copie

Donc, quand j'écris (copier le fichier exactement avec le même nom) utilisateurs entrés au fichier de sortie (fichier copié) Je l'écrire dans la chaîne longue, sans espaces évidemment juste pour le rendre lisible ici,

filenamesize nom filecontentsize ContenuFichier -à-dire 10 myfile.txt 5 bonjour

Alors quand vient à lire cette donnée je commence au début du fichier en utilisant lseek() et je sais que les 4 premiers octets sont (int) qui est la longueur du nom de fichier, donc je mets cela en valeur int namelen en utilisant la lecture fonction.

Mon problème est que je veux utiliser cette valeur lue pour le nom de fichier (4 premiers octets) pour déclarer mon tableau pour stocker le nom de fichier avec la bonne longueur. Comment puis-je mettre ce tableau en lecture() pour les lecture valeur de magasins dans ce tableau de caractères spécifié, voir ci-dessous s'il vous plaît

int namelen; //value read from first 4 bytes of file lenght of filename to go in nxt read() 
char filename[namelen]; 
read(fd, filename[namelen], namelen);//filename should have 'myfile.txt' if user entered that filename 

Donc, ma question est une fois que je lis que les 4 premiers octets de fichier me donner longueur du nom de fichier stocké En namelen, je veux lire namelen quantité d'octets pour me donner le nom du fichier d'origine afin que je puisse créer un fichier copié dans le répertoire?

Merci

+2

Afficher toute la fonction 'copie' (et la logique d'entrée/les descripteurs de fichier/etc). Il semble que vos hypothèses sont loin de la base (pourquoi pensez-vous que les 4 premiers octets d'un fichier contiennent la longueur par exemple?) – KevinDTimm

+0

"Pourquoi pensez-vous que les 4 premiers octets d'un fichier contiennent la longueur par exemple?" Parce qu'il est qui l'a écrit dans le fichier en premier lieu je suppose;) –

+0

Mieux espérer que votre programme n'est jamais utilisé sur une machine qui stocke les entiers différemment. La compilation 32 bits contre 64 bits va casser cela (c'est pourquoi il y a size_t). Mais size_t ne résoudra pas le problème big-endian vs little-endian. –

Répondre

0
int namelen; //value read from first 4 bytes of file lenght of filename to go in nxt read() 
char* filename = new char[namelen+1]; 
read(fd, filename, namelen); 
filename[namelen]=0; // Just to keep readed buffer c-string compatible 
do something with filename 
delete[] filename; 
+0

C'est un code C++. L'OP veut C. –

0

votre question précédente here, vous n'avez pas Upvote une seule réponse ou accepter l'un d'eux. Vous semblez avoir utilisé ces réponses cependant. Les personnes qui ont répondu à cette question plus tôt pourraient être enclins à vous aider si vous pouviez prendre la peine de montrer un peu de gratitude pour leur aide antérieure en votant pour leurs réponses et en acceptant celle que vous avez trouvée la plus utile.

+0

Ceci est un bon commentaire. Mauvaise réponse cependant. –

+0

désolé je suis nouveau à cela, je ne savais pas comment poser 2 questions dans le même fil. Je vais marquer la réponse, désolé pour ce peuple – daza166