c программирование копирования файлов - PullRequest
1 голос
/ 10 декабря 2010

Имеется несколько проблем с моей программой копирования, которая создает копию файла, который вводит пользователь.Я решил не использовать структуру (size_t), а только переменные назначенных (int) и (char) типов, поэтому я знаю точное значение байтов для чтения ().то есть я знаю, что начинаю с начала файла и читаю 4 байта (int), чтобы получить значение длины имени файла, которое я использую в качестве размера при следующем чтении ()

Итак, когда я пишу (копирую файл точно содно и то же имя) пользователь ввел файл в выходной файл (скопированный файл) Я записал его в длинную строку, без пробелов, очевидно, просто чтобы сделать его читабельным здесь,

filenamesize filename*

Поэтому, когда я приступил к чтению этих данных, я начинаю с начала файла, используя lseek (), и я знаю, что первые 4 байта (int) - это длина имени файла, поэтому я помещаю это в значение int namelen, используя функцию чтения.,

Моя проблема в том, что я хочу использовать это значение для размера имени файла (первые 4 байта), чтобы объявить мой массив для хранения имени файла с правильной длиной.Как поместить этот массив в read (), чтобы значение read сохранялось внутри указанного массива char, см. Ниже

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

Итак, мой вопрос: как только я прочитаю первые 4 байта из файла, что даст мне длинуимя файла хранится в namelen, затем я хочу прочитать namelen количество байтов, чтобы дать мне имя файла исходного файла, чтобы я мог создать скопированный файл в каталоге?

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 декабря 2010

В своем предыдущем вопросе здесь вы не проголосовали ни за один ответ или не приняли ни одного из них. Похоже, вы использовали эти ответы.

Люди, которые ответили на этот предыдущий вопрос, могут быть склонны помочь вам здесь, если вы потрудитесь выразить небольшую благодарность за их раннюю помощь, проголосовав за их ответы и приняв тот, который вы нашли наиболее полезным.

0 голосов
/ 10 декабря 2010
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;
...