2009-04-21 38 views
0

我开始思考如何处理保存我的应用程序的功能,并考虑过2个选项:实现一个保存功能在C#图像处理应用

应用程序有节点,如:

Blur 
Contrast 
Sharpen 
Invert 
... 

1.解读保存的文件,如:

Blur name:"Blur01" Amount:5 
... 

2.具有自我可执行文件格式保存的文件,如:

Blur blur = new Blur(); 
blur.Name = "Blur01" 
blur.Amount = 5 
... 

我应该选择哪一个?有没有更好的方法来处理这个问题?

我希望保存的文件是向后和向前兼容的。

编辑:谢谢你所有的答复。任何人都可以请解释为什么#2不会成为未来的证据?是否因为可以更改#1的加载/打开代码,而不是#2?

回答

2

我会更喜欢第一种选择。

虽然,一般来说,我认为XML会比创建自己的语法更好。从兼容性/面向未来的角度来看,这比试图为自己的文件创建自己的语法分析器要好得多。

什么是这样的:

<Filters> 
    <Blur Name="Blur01" /> 
    <Sharpen Name="Sharpen01" Amount=5 /> 
</Filters> 
3

你也许可以使用XML序列化,因为它是被广泛接受和人类可读。 这里有一个教程:XML Serialization

0

你是否保存在一个文本文件?

如果是这样,将它保存为XML会更好吗?

<Blur> 
<name>Blur01</name> 
<amount>5</amount> 
</Blur> 

,否则我不知道我理解的问题:)

+0

是的任何形式的ascii文件。 – 2009-04-21 17:17:17

1

我太想有一个XML文件去,因为这将允许您以确保兼容性向前和向后。

这是因为您查找属性而不是逐行解析文件。

例如,如果模糊的变化来自:

<Blur> 
<name>Blur01</name> 
<amount>5</amount> 
</Blur> 

到:

<Blur> 
<name>Blur01</name> 
<amount>5</amount> 
<feather>true</feather> 
</Blur> 

较旧版本的应用程序仍然能够读取该文件,因为它们不会找羽毛属性。您只需确保在创建对象时设置默认值,以便在不留下未设置的数据的情况下读取旧文件。

作为对更新的回应 - 没有理由不能做出2号未来证明。你只需要自己进行版本控制。

1

的原因有自执行“保存格式”一般是不好的是,今天你的“模糊”功能可能看起来像:

public class Blur 
{ 
    int Amount = 5; 
} 

但在未来,你可能会提高你的模糊“系统” ,而不是有类似:

public class Blur 
{ 
    int HorizontalAmount = 5; 
    int VerticalAmount = 10; 
} 

,现在当您执行保存的文件,它将不再编译,因为不再有一个“量”属性。然后,为了获得向后兼容性,您需要'解释'金额值,现在表示水平分量= 5 VerticalAmount = 5(或其他)。

真的,从长远来看,从一开始就有一个解释的文件格式会更好。

+0

谢谢,会使用xml序列化与自执行一样有问题吗? – 2009-04-21 21:37:31