![](/img/trans.png)
[英]System.InvalidCastException: Specified cast is not valid. - DynamoDB Query
[英]System.InvalidCastException: 'Specified cast is not valid.'
我正在嘗試使用下面的代碼使用memorystream和filestream和一個結構讀取二進制文件:
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
byte[] buffer = null;
long numBytes = new FileInfo(filename1).Length;
FileStream fs = new FileStream(filename1, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
buffer = br.ReadBytes((int)numBytes);
mStream.Write(buffer, 0, buffer.Length);
mStream.Position = 0;
GameSaved newdata = (GameSaved)formatter.Deserialize(mStream);
mStream.Close();
fs.Close();
fs.Dispose();
mStream.Dispose();
GameSaved
結構如下所示:
[Serializable]
struct GameSaved
{
public int Num_Of_Saved_Game;
public string[] Name_Of_Saved_Game;
}
但是代碼拋出錯誤
System.InvalidCastException:'指定的強制轉換無效。
編輯:這就是我保存GameSaved
結構的方法:
buffer = null;
formatter = new BinaryFormatter();
mStream = new MemoryStream();
formatter.Serialize(mStream, newdata);
buffer = mStream.ToArray();
mStream.Close();
filename = "name.sav";
curFile = @"c:\C#\Try_To_Save_MS\Try_To_Save_MS\bin\Debug\name.sav";
if (File.Exists(curFile))
File.Delete(curFile);
fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
fs.Write(buffer, 0, (int)buffer.Length);
fs.Dispose();
mStream.Dispose();
誰能告訴我解決問題的方法嗎?
最好的祝福
您應該使用BinaryFormatter.Serialize方法來序列化對象。 在您的代碼中,您編寫了一個緩沖區,但可能不會做同樣的事情
可以以這種方式編寫數據序列化的樣本
GameSaved reloaded = new GameSaved();
void Main()
{
GameSaved game = new GameSaved();
game.Num_Of_Saved_Game = 2;
game.Name_Of_Saved_Game = new string[] {"game1", "game2"};
Serialize(@"e:\temp\serialize.bin", game);
Deserialize(@"e:\temp\serialize.bin");
Console.WriteLine("Games:" + reloaded.Num_Of_Saved_Game);
foreach(string s in reloaded.Name_Of_Saved_Game)
Console.WriteLine(s);
}
void Deserialize(string filename1)
{
BinaryFormatter formatter = new BinaryFormatter();
using(FileStream fs = new FileStream(filename1, FileMode.Open, FileAccess.Read))
reloaded = (GameSaved)formatter.Deserialize(fs);
}
void Serialize(string filename1, GameSaved game)
{
BinaryFormatter formatter = new BinaryFormatter();
using (FileStream fs = new FileStream(filename1, FileMode.OpenOrCreate, FileAccess.Write))
formatter.Serialize(fs, game);
}
[Serializable]
struct GameSaved
{
public int Num_Of_Saved_Game;
public string[] Name_Of_Saved_Game;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.