【问题标题】:Serialization is overwriting to the file序列化正在覆盖文件
【发布时间】:2019-05-23 11:32:51
【问题描述】:

我创建了一个类来创建从用户读取和写入的过程。有人可以帮我为什么它正在写入文本文件但它会覆盖自己吗?

[Serializable]
class FileReadWrite<TFile>
{
    static Stream stream;
    static IFormatter formatter = new BinaryFormatter();

    //Writing to text file
    public static void SerializeData(List<TFile> objectToSerialize, string filePath)
    {            
        stream = new FileStream(filePath, FileMode.Create);        
        formatter.Serialize(stream, objectToSerialize);
        Console.WriteLine("Account Created SuccessFully!");
        stream.Close();
    }
}

【问题讨论】:

  • 阅读文档FileMode.Create 指定操作系统应该创建一个新文件。如果文件已经存在,则会被覆盖。
  • 真正的问题是你想让它做什么,因为它完全按照你的吩咐去做

标签: c# serialization overwrite file-writing


【解决方案1】:

需要 FileMode.Append。根据doc

如果文件存在则打开文件并查找文件末尾,或者 创建一个新文件。这需要附加权限。文件模式.追加 只能与 FileAccess.Write 结合使用。试图寻求 到文件末尾之前的位置会引发 IOException 异常,任何读取尝试都会失败并抛出 NotSupportedException 异常。

所以解决办法是:

stream = new FileStream(filePath, FileMode.Append);

或者您可以进行明确的检查,例如:

if(!File.Exists(fileName))
{ // create a new file 
}
else //Append to a file

【讨论】:

  • 感谢 Gauravsa,这是我的 FileMode.Append 问题 :)。
【解决方案2】:

问题不是很清楚,这可能是您想要做的: 使用 (FileStream file = new FileStream(Filepath, FileMode.Append, FileAccess.Write))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-09
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多