我可以使用C#中的文件流将类的obj发送到文件中吗

本文关键字:文件 obj 可以使 我可以 | 更新日期: 2023-09-27 17:58:33

我想知道是否可以发送一个包含4个成员的完整obj:

string name
string lastname
int StudentID
int CitizenID

使用filestream命令以二进制格式保存在.txt文件中?

我知道序列化,它很容易将obj发送到.xml文件,但当我使用它制作程序并将其展示给老师时,他说他不希望我使用它,说我必须使用基本文件流命令,如fstreaminstreamoutstream和。。。在C++中,并告诉我他想要一个二进制格式保存的.txt文件。

现在我的问题是,我可以把一个完整的obj发送到C#中的.txt文件吗?还是必须像字符串一样发送它,这将是一项相当艰巨的工作。

因为我必须将所有成员转换为字符串,然后在每个成员的末尾放一个指示符或其他东西,这样我以后就可以读取它们并将它们分离。

我可以使用C#中的文件流将类的obj发送到文件中吗

现在我的问题是,我可以把一个完整的obj发送到C#中的.txt文件吗?还是必须像字符串一样发送它。。。这将是相当多的工作,

是的,这有一个名称:序列化。无论是在自己的代码中手动执行,还是使用一系列现有序列化库中的一个,都是序列化。如果你的老师不希望你使用序列化库,那么你就必须在自己的代码中使用它。坦率地说,这是愚蠢的。我想知道老师是否也希望你在硬盘上写原始命令,以避免所有愚蠢的抽象,比如HAL、OS或公共类库。。。

也许值得向你的老师澄清什么是可以接受的,什么是不可以接受的。例如,二进制序列化程序就足够了吗?我能说出几个。使用BinaryWriter/BinaryReader可以吗?还是练习的目的是让您思考序列化/反序列化需要做什么?如果是后者:那么是的,了解流、编码和成帧协议(sentinel值与带长度前缀的数据等)。

我会用这个。。。

void saveInBinary()
{
    IFormatter binaryFormatter = new BinaryFormatter();
    Stream binaryStream = new FileStream("File Path Here", FileMode.Create, FileAccess.Write, FileShare.None);
    binaryFormatter.Serialize(binaryStream, this);
    binaryStream.Close();
}

将其粘贴到对象的成员空间中,然后直接调用它。

或者,一些更有用的东西。。。

void saveInBinary(object o)
{
    IFormatter binaryFormatter = new BinaryFormatter();
    Stream binaryStream = new FileStream("File Path Here", FileMode.Create, FileAccess.Write, FileShare.None);
    binaryFormatter.Serialize(binaryStream, o);
    binaryStream.Close();
}

这将序列化传递给它的任何对象。

最后一个变体(我保证!):p

void saveInBinary(object o, string filePath)
{
    IFormatter binaryFormatter = new BinaryFormatter();
    Stream binaryStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None);
    binaryFormatter.Serialize(binaryStream, o);
    binaryStream.Close();
}

此方法允许您将对象和文件路径传递给方法,以将传递的对象序列化为传递的文件路径。

当然,这将不允许您读取.txt文件的内容。这看起来像是胡言乱语。如果你的意图是将数据写入一个人类可读的文件,那么,有很多这样的例子p我只是提供了序列化的东西,因为我花了一段时间才弄清楚。)

编辑:拍摄。我忘了一些代码。。。

using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;

代码需要这些才能工作(对于IFormatter)此外,要使Stream工作,您需要使用

using System.IO;

抱歉忘了。

编辑2:忘了提一下,您需要在希望以这种方式序列化的对象上使用[Serializable]标记。只需将"[Serializable]"放在要序列化的类的顶部即可。

[Serializeable]
class SerializeableObject
{
    string aString;
    void aMethod()
    {
    }
}

像这样。