姚 迪,顏庭柏
1.南京市六合區(qū)氣象局,江蘇 南京 211500
2.南京市氣象局,江蘇 南京 210008
伴隨國民經(jīng)濟與科技水平的快速發(fā)展,氣象現(xiàn)代化設備越來越多的投入到業(yè)務日常運行之中。目前,氣象系統(tǒng)觀測儀器多為自動觀測,每種設備相對獨立,并分別生成氣象數(shù)據(jù)文件。氣象數(shù)據(jù)文件作為觀測成果對于氣象研究具有極其重要的科學價值。為便于統(tǒng)一存儲、保證氣象數(shù)據(jù)文件獲取的完整性與連貫性,避免因斷電、觀測設備故障等原因造成數(shù)據(jù)丟失,有必要將各種氣象數(shù)據(jù)文件進行集中管理。因此,實現(xiàn)異機備份氣象數(shù)據(jù)文件是非常有必要的。同時,因氣象數(shù)據(jù)文件存在多樣性、時效性等特點,市場上諸多應用程序對于備份氣象數(shù)據(jù)文件并不適用,無法滿足氣象部門對于備份文件的特殊要求。相比較而言,由氣象部門工作人員自身開發(fā)異機備份程序,針對性則更強,更貼近需求,所開發(fā)程序通常具有靈活、高效的優(yōu)點。
異機備份氣象數(shù)據(jù)文件,可以最大限度的保證數(shù)據(jù)文件的存儲安全性,實現(xiàn)與原機存儲的雙重保險。通過簡單的批處理命令,使用CMD命令處理器逐條解釋執(zhí)行,可在DOS環(huán)境下實現(xiàn)對氣象數(shù)據(jù)文件的異機備份,如若保存多種氣象數(shù)據(jù)文件,則運轉周期長,效率明顯降低,并缺乏交互能力,靈活性及可擴展性不強。因此,有必要引入高一級程序語言來實現(xiàn)異機備份氣象數(shù)據(jù)文件的要求。
C#(C sharp)語言是微軟(Microsoft)公司為.NET Framework量身訂做的程序語言,C#擁有C/C++的強大功能以及Visual Basic簡易易用的特性,是第一個組件導向(Component-oriented)的程序語言,和C++與Java一樣亦為對象導向(object-oriented)程序語言。綜上,C#是一種安全的、穩(wěn)定的、簡單的、優(yōu)雅的編程語言,它在繼承C和C++強大功能的同時去掉了一些它們的復雜特性(例如沒有宏和模版,不允許多重繼承)。C#綜合了VB簡單的可視化操作和C++的高運行效率,因其強大的操作能力、優(yōu)雅的語法風格、創(chuàng)新的語言特性和便捷的面向組件編程的支持,具有極高的使用價值。
在明確所使用的程序語言之后,我們需對實現(xiàn)思路展開梳理。本文僅以一般氣象臺站常有的EN風儀數(shù)據(jù)文件及自動氣象站B和采集數(shù)據(jù)文件為例進行說明:
1)了解氣象數(shù)據(jù)文件結構并對文件格式進行定義:EN風儀數(shù)據(jù)文件每日生成FA與DF兩種數(shù)據(jù)文件,B和采集數(shù)據(jù)文件則包含有B、Z、P、T、U、W、R共計7種文件。經(jīng)過總結,我們可簡單理解為上述文件格式分別為FAyyMM.dat、DFyyMM.dat、BIIiiiMM.0yy、ZIIiiiMM.0yy、PIIiiiMM.0yy、TIIiiiMM.0yy、UIIiiiMM.0yy、WIIiiiMM.0yy、RIIiiiMM.0yy,其中 IIiii為臺站區(qū)站號、MM為月份、yy為年份后兩位。不難發(fā)現(xiàn),對于EN風儀數(shù)據(jù)文件,我們可將其定義為“FA(DF)”+“yyMMM”+“.dat”;對于固定臺站 ,其區(qū)站號不變,如六合氣象站為“58235”,則B文件格式可固定為“B58235”+“MM.0yy”,其他采集數(shù)據(jù)文件格式依此類推。
2)確定C#程序實現(xiàn)方針并選用合適語句:本文僅針對簡單異機氣象數(shù)據(jù)文件備份,故以簡單思路為之。經(jīng)過多次驗證,我們得出在保證原存儲設備和目的存儲設備內(nèi)部時鐘準確的基礎上,以當前時間查找最新氣象數(shù)據(jù)文件進行備份方法簡單可行。因此,在C#中,需使用時間函數(shù)。
首先,以EN風儀氣象數(shù)據(jù)文件為例,需對“yyMM”進行賦值,有String FileStr = DateTime.Now.ToString("yyMM"),取出當前時間,如“1011”;其次,對文件格式進行描述,為FileStr = "FA(DF)" + FileStr + ".dat",這樣,備份氣象數(shù)據(jù)文件名被定義;然后,對原存儲路徑與目的存儲路徑分別進行確定,通過語句“System.IO.File.Copy”即可實現(xiàn)異機備份,注意的是,copy語句要求前后路徑指向文件名,同時,在存儲氣象數(shù)據(jù)文件時,應使用“true”語句,以實現(xiàn)覆蓋存儲。對于自動氣象站數(shù)據(jù)文件的備份,在EN風儀氣象數(shù)據(jù)文件基礎之上,只需對時間及文件名進行重新定義,便能嫁接過來實現(xiàn)異機氣象數(shù)據(jù)文件備份了,程序舉例如下:
String FileStr = DateTime.Now.ToString("MM.0yy"),
FileStr = "B58235" + FileStr,
String pathStr = "\\172.21.90.131\AwsSource\"+ FileStr,
String sourcePath = "F:\文件備份\"+ FileStr,
System.IO.File.Copy(pathStr, sourcePath, true),
MessageBox.Show("備份成功")。
應該說,我們設計的這套異機備份氣象數(shù)據(jù)文件程序,通俗直觀容易理解,思路清晰,實現(xiàn)方便,對基層臺站具有較高的可操作性,各臺站可通過“計劃任務”,實現(xiàn)定時氣象數(shù)據(jù)文件的異機備份。另一方面,該程序若進一步完善,引入讀寫程序方法、日志報錯、失敗再存儲等功能,對于所需備份氣象數(shù)據(jù)文件舉一反三,擴展存儲文件類型,就可以實現(xiàn)更為完善、實用的功能,也將具有更為寬闊的推廣空間。
[1]http://baike.baidu.com/view/6590.htm.
[2]Karli Watson,Christian Nagel.C#入門經(jīng)典[M].3版.北京:清華大學出版社.
[3]李文強.跟我學C#程序設計[M].北京:清華大學出版社.