Je travaille sur des fichiers mappés en mémoire. Est-il possible de connaître la longueur du contenu du fichier mappé en mémoire? Ce que je veux, c'est ajouter le fichier mappé en mémoire existant. Il est facile d'ajouter les octets dans le fichier, mais je cherche à ajouter une chaîne.Longueur de fichier mappé en mémoire
Nous pouvons vérifier la propriété CAPACITY, mais elle renvoie la taille des octets, je pense. Pour être plus clair, j'explique le scénario. Je crée un fichier mappé en mémoire A. J'écris "Bonjour" quand je le crée. Ça fonctionne bien. Maintenant, je veux écrire le « monde » dans le fichier existant A.
J'utilise ci-dessous le code pour cela:
var file = MemoryMappedFile.OpenExisting("myFile");
string str = "String to append";
using (var view = file.CreateViewAccessor())
{
using (var stream = file.CreateViewStream())
{
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(str.ToArray(), INT SIZE,Convert.ToInt32(view.Capacity), str.Length);//Error
}
}
using (var stream = file.CreateViewStream())
{
Console.WriteLine("Reading appended File");
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
Console.WriteLine(reader.ReadString());
Console.WriteLine(string.Empty);
}
J'ai marqué la ligne avec (//) qui demande la taille. Je veux connaître la valeur de (INT TAILLE) Toute aide serait appréciée.
[EDIT] J'utilise C#, Visual Studio 2010.
Maintenant, je suis en utilisant ce code à ajouter:
var file = MemoryMappedFile.OpenExisting("myFile");
string str = "String to append";
string str1 = string.Empty;
using (var stream = file.CreateViewStream())
{
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
str1 = reader.ReadString();
str1 = str1 + "\n" + str;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(str1);
}
using (var stream = file.CreateViewStream())
{
Console.WriteLine("Reading appended File");
System.IO.BinaryReader reader = new System.IO.BinaryReader(stream);
Console.WriteLine(reader.ReadString());
Console.WriteLine(string.Empty);
}
Mais ce ne est pas quoi que ce soit annexant. Pouvez-vous s'il vous plaît vérifier mon code?
Merci pour la réponse. Pouvez-vous s'il vous plaît re-vérifier ma question? J'ai essayé ce que je comprends de votre réponse. Mais ça ne marche pas. –
@Deepak: Vous devez réinitialiser ou rouvrir le flux avant de l'écrire, sinon vous allez continer l'écriture là où vous l'avez laissé pour que la chaîne d'origine reste la première chaîne du flux. – Guffa
Génial ... Ca marche. –