这次,我先介绍 Common/Fcl.cs 源程序文件。
以下是引用片段
1 using System;
2 using System.IO;
3 using System.Drawing;
4
5 namespace Skyiv.Ben.PushBox.Common
6 {
7 ///
8 /// 这里是 .NET Framework 支持,而 .NET Compact Framework 不支持的东东
9 ///
10 static class Fcl
11 {
12 ///
13 /// 获取为此环境定义的换行字符串。-- Environment
14 ///
15 public static string NewLine { get { return "\r\n"; } }
16
17 ///
18 /// 打开一个文本文件,将文件的所有行读入一个字符串,然后关闭该文件。-- File
19 ///
20 /// 要打开以进行读取的文件
21 /// 包含文件所有行的字符串
22 public static string ReadAllText(string path)
23 {
24 string text = "";
25 if (File.Exists(path))
26 {
27 using (StreamReader sr = new StreamReader(path, Pub.Encode))
28 {
29 text = sr.ReadToEnd();
30 }
31 }
32 return text;
33 }
34
35 ///
36 /// 创建一个新文件,在其中写入指定的字符串,然后关闭该文件。-- File
37 ///
38 /// 要写入的文件
39 /// 要写入文件的字符串
40 public static void WriteAllText(string path, string contents)
41 {
42 using (StreamWriter sw = new StreamWriter(path, false, Pub.Encode))
43 {
44 sw.Write(contents);
45 }
46 }
47
48 ///
49 /// 将指定的 Size 添加到指定的 Point。-- Point
50 ///
51 /// 要添加的 Point
52 /// 要添加的 Size
53 /// 加法运算的结果
54 public static Point Add(Point point, Size size)
55 {
56 return new Point(point.X + size.Width, point.Y + size.Height);
57 }
58
59 ///
60 /// 将一维数组的大小更改为指定的新大小。-- Array
61 ///
62 /// 数组元素的类型
63 /// 要调整大小的一维数组
64 /// 新数组的大小
65 public static void Resize(ref T[] array, int newSize)
66 {
67 if (array != null %26amp;%26amp; array.Length == newSize) return;
68 if (array == null) array = new T[0];
69 T[] newArray = new T[newSize];
70 Array.Copy(array, newArray, Math.Min(array.Length, newArray.Length));
71 array = newArray;
72 }
73 }
74 }
俗话说,工欲善其事,必先利其器。我们知道,Microsoft .NET Compact Framework 只是 Microsoft .NET Framework 的一个子集,她省略了一些不常用的功能。但是,假如我们恰好需要这些功能,只好自己重新实现一下了。这个 Fcl 静态类就是起这个作用的。源程序代码的注释已经写得很清楚了。
Fcl.NewLine 我原本是想写成这样的
以下是引用片段
static class Fcl
{
static static string newLine;
///
/// 获取为此环境定义的换行字符串。-- Environment
///
public static string NewLine
{
get
{
if (newLine == null)
{
newLine = (Environment.OSVersion.Platform != PlatformID.Unix) ? "\r\n" : "\n";
}
return newLine;
}
}
}
可惜的是,这段代码无法在 .NET Compact Framework 下通过编译(假如是 .NET Framework 则没有问题)。原因是 PlatformID 枚举的成员
Unix 操作系统为 Unix。
Win32NT 操作系统为 Windows NT 或较新的版本。
Win32S 操作系统为 Win32s(Win32 子集)类型。
Win32Windows 操作系统为 Windows 95 或较新的版本。
WinCE 操作系统为 Windows CE。
PlatformID.Unix 并不被 .NET CF 所支持。这实在是一件很希奇的事,既然 .NET CF 都支持 PlatformID 的 Win32NT、Win32S、Win32Windows、WinCE 成员,为什么就不能支持 Unix 成员呢?这样,这个程序将来要移植到 Linux 操作系统时就有些小麻烦了。
要知道,这在主窗体的代码中用以下一段代码来实现在智能手机上禁用“前端显示”功能。
以下是引用片段
public partial class MainForm : Form
{
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
miTopMost.Enabled = (Environment.OSVersion.Platform != PlatformID.WinCE);
env.LoadConfig();
env.LoadGroup();
LoadLevel(true);
if (env.IsSave) Restore(env.Steps);
}
