я должен хранить имя файла в двоичный файл, который я пишу, я в настоящее время написал так:Чтение обугленного * из двоичного файла
void write(map<char, bits> &bitstring,map<char,int> &ccount, string header,string fname,ofstream &outf)
{
ifstream inf(header+fname);
cout << "FName: " << fname << endl;
const char * pName = fname.c_str();
fname = header+ fname + ".mcp";
const char * c = fname.c_str();
FILE* pFile;
pFile = fopen(c, "w+b");
inf.seekg(ios::beg, ios::end);
int size = inf.tellg();
int length = 0;
string data = "";
int magicNum = 2262;
int fileNameSize = strlen(pName);
fwrite(&fileNameSize, sizeof(int), 1, pFile);
cout <<"FIle Name Size: "<< fileNameSize << endl;
fwrite(pName, fileNameSize, 1, pFile);
fclose(pFile);
}
И Я также отправляю размер имени файла, чтобы я знал, сколько данных мне нужно прочитать, чтобы получить полное имя файла.
void read2(string fname, map<char, int> &charCounts, std::vector<bool> &bits,ofstream &outf)
{
string fname1 = fname + ".mcp", outfile = "binarycheck";
bool testDone = false, counts = false;
std::ifstream inf(fname1, std::ios::binary);
std::ofstream ouf("binarycheck.txt", std::ios::binary);
char character;
int count[1] = { 0 };
int checkcount = 0;
int mNum[1] = { 0 }, size[1] = { 0 };
int FNamesize = 0;
inf.read((char*)&FNamesize, sizeof(int));
char *name=new char[FNamesize+1];
inf.read(name, FNamesize);
name[FNamesize] = '\0';
string str(name);
cout << "File Name: ";
cout << std::string(name) << endl;
cout << "Magic Num: " << mNum[0] << endl;
cout << "File Name Size: " << FNamesize<< endl;
inf.close();
}
Я получаю размер правильно, но я понятия не имею, как перебирать имя, чтобы сохранить его как строку. Я попытался использовать вектор, но это не помогло, так как inf.read использует char * в качестве своего первого параметра. Любая помощь будет замечательной.
Проблема заключается в том, что 'fname = header + fname +" .mcp ";' invalidates 'pName', который становится обвисшим указателем, и любое его использование вызывает неопределенное поведение. – molbdnilo
Это была проблема @molbdnilo, и теперь она отлично работает. Спасибо за помощь: D – eragon2262