comment créer de la mémoire tampon en c++ pour créer un nouveau fichier
Jetez un oeil sur le code. Je suis un débutant et c'est la première fois que je suis entrain de créer un tampon en C++. Comment créer de la mémoire tampon en C++ pour créer un nouveau fichier après la lecture de l'ancien contenu dans la mémoire tampon, et en ignorant la partie qui est à supprimer tout en tronquant les anciennes données et de stocker le contenu de la mémoire tampon?
int main() {
Admin item; //Admin is a class
ios::pos_type pos;
int productId;
char *ch; //pointer to create buffer
int length;
cout << "Enter Product Id of item to delete: ";
cin >> productId;
ifstream readFile("Stock.dat", ios::binary | ios:: in | ios::out);
while (readFile) {
readFile.read(reinterpret_cast<char*>(&item), sizeof(Admin));
if (item.getStatus() == productId) {
pos = readFile.tellg() - sizeof(Admin);
break;
}
}
readFile.close();
ifstream readNewFile("Stock.dat", ios::binary | ios:: in | ios::out);
readNewFile.seekg(0, ios::end);
length = readNewFile.tellg();
ch = new char[length]; //is this how buffer is created?if no, please correct it.
readNewFile.seekg(0, ios::beg);
while (readNewFile) {
if (readNewFile.tellg() == pos)
readNewFile.ignore(sizeof(Admin));
readNewFile.read((ch), sizeof(Admin)); //is this how contents are read into buffer from file stream;
if (readNewFile.eof())
readNewFile.close();
}
ofstream outFile("Stock.dat", ios::trunc | ios::app);
outFile.write(ch, sizeof(Admin)); //I am doubtful in this part also
}
OriginalL'auteur Udit | 2013-03-23
Vous devez vous connecter pour publier un commentaire.
En C++, allouer de la mémoire pour créer des tampons comme ceci:
Le problème avec votre code que vous avez utilisé
()
au lieu de[]
.Lorsque vous souhaitez libérer de la mémoire de ces tampons que vous utilisez le
delete[]
opérateur:Aussi, vous avez bien lu à partir du fichier, mais pas dans le sens que vous attendez.
Il valide la syntaxe et tout, mais le problème est, vous êtes en écrasant les données de votre tampon.
Vous devriez probablement être la lecture comme ceci: (où
index
est unint
initialisé à0
avant lawhile
boucle)L'utilisateur dans les commentaires suggéré, vous pouvez même utiliser un
std::vector<char>
ici parce que c'est aussi rapide qu'unchar*
et il n'a pas besoin d'une taille spécifiée 🙂new/delete
entièrement et simplement de la taille d'unstd::vector<>
.fait la correction que vous avez dit, mais le code n'est pas en supprimant l'élément souhaité dans le fichier, il y a un problème lors de l'écriture et de la lecture à la mémoire tampon dans mon code?
Essayez d'imprimer le contenu des variables telles que
pos
et, éventuellement, lach
mémoire tampon dans la console.après avoir fait comme vous l'avez dit à propos de l'ajout d'index erreurs suivantes s'est produite lors de la lecture de la mémoire tampon F:\codeBlocks\smb\main.cpp/193/error: invalid conversion from 'char' to 'char*' ,F:\codeBlocks\smb\main.cpp/193/error: l'initialisation de l'argument 1 of 'std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::read(_CharT*, std::streamsize) [avec _CharT = char, _Traits = std::char_traits<char>]'| et alors que l'écriture de fichier à partir de la mémoire tampon F:\codeBlocks\smb\main.cpp/206/error: invalid conversion from 'char' to 'const char*'|
Fixe. Désolé.
OriginalL'auteur Mohamad Ali Baydoun
Faire un
ch = new char[length]
. Aussi, http://www.cplusplus.com/doc/tutorial/dynamic/ est un bon point de départ.Que d'un côté, je comprends que vous êtes débutant, je vous le souhaite pas pour vous décourager, mais, il serait grand si vous faites votre recherche sur les questions qui sont facilement répondre avant de poster.
OriginalL'auteur user2184879