ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Visual Basic User's Clubコミュの電源ブチ切りでXMLファイルが壊れる

  • mixiチェック
  • このエントリーをはてなブックマークに追加
組込PCでWIN10IOTを使用しています。
アプリケーションは、VB2010で作成しています。

アプリケーションは、画面位置や画面の枚数を覚えているのですが

画面サイズや位置を変更後、すぐに電源を切るとXMLファイルの保存が遅いのかわかりませんがファイルが壊れてしまいます。

質問です
1)XMLファイルの書き込み保存は、INIファイルの書き込み保存より遅いのですか?
  XMLファイルとINIファイルでは、どちらの方が処理速度は、速いのでしょうか?
  Iniファイルの書き込み保存が速いのなら画面位置の保存だけIniファイルで保存した方がいいのでしょうか?


2)電源をブチ切りを検出する方法があるのでしょうか?

3)XMLファイルの高速で書き込み保存する方法てあるのでしょうか?

3パターンの方法で回避したいと思っています。
以上です。


コメント(4)

IoT開発は、したことないのでこまかいことはわかりませんが、まず開発環境をVS2015にしたほうが
よいのではないでしょうか。
理由は、Win10IoT用の開発環境が構築できるからです。
インストールなどは以下をご参考に。
http://www.atmarkit.co.jp/ait/articles/1511/11/news042.html
VB2010だと、ARM向けコンパイルができるぐらいでしょうか。Win10IoTの環境向けではないとおもうので
何か変な動きをするかもしれません。


1)普通の環境であれば、気にするほどの差はないと思いますが、しばらく時間をおいてからの電源OFFなら書き込めているということでしょうか?
この場合なら、遅延書き込みを行ってる可能性があるので、そのような運用とすべきかもしれません。

2)ないと思います。アプリケーションではPOWER情報をメッセージで受けとるので、OSが反応できないものはアプリに通知できないかと。

3)XML処理クラスを使わないで(つまりプログラムでXMLテキストを書く)、テキストとして出力するのが
最も速いかもしれません。プログラムしかコンフィグを読み書きしないのであれば、そもそもXMLフォーマットにする必要もないですが。
1)普通の環境であれば、気にするほどの差はないと思いますが、しばらく時間をおいてからの電源OFFなら書き込めているということでしょうか?
しばらく時間をおいたら書き込みは、しているのでファイルが壊れることは、ありません。
今は、ファイルが壊れている時は、1個前の画面位置や情報を覚えています。

以下の感じでXMLファイルの書き込みが正しかったらバックアップをするようにしているのですが
この操作が正常に判断できる時と判断できない時があります?
XMLファイルが正常かどうかは、どのように判断するとかあるのでしょうか?


Private Sub XMLFileCheck()

Try
Dim strFileName As String = IO.Path.Combine(ProjectFolder, Me.ProjectName + ".xml")
Dim strFileName_bak As String = IO.Path.Combine(ProjectFolder, Me.ProjectName + "_bak.xml")

Dim doc As XmlDocument = New XmlDocument()
doc.Load(strFileName)

' Get and display all the book titles.
Dim root As XmlElement = doc.DocumentElement
Dim elemList As XmlNodeList = root.GetElementsByTagName("a:width")

If elemList.Count >= 8 Then
''正常ファイルなら現行のファイルをバックアップする。
My.Computer.FileSystem.CopyFile(strFileName, strFileName_bak, True)
End If
Catch ex As Exception


End Try


End Sub
>>[3] 内容の正常性については作成した処理の責任として
XMLフォーマットのチェックであれば、正解となるフォーマットデータ(出力予定の構造情報とか)を持ち
それと整合性がとれているかのチェックが必要でしょう。XMLの仕様をある程度知っている必要もあります。

なので、私でしたら、XMLシリアライザーを使います。
参考 http://dobon.net/vb/dotnet/file/xmlserializer.html

対象のXMLが件のconfig程度のものであれば、処理も簡単です。
シリアライザーがXMLの分析・作成処理をしてくれるので、アプリ作成者はXMLを知らなくても済みます。

これで作成したものであれば、単純にio.file.existsでファイルの有無をチェックするだけでよいですが
このシリアライズ処理でエラーが出ていなければファイルもできてるし、XMLとしての内容も正しいので、
チェック処理自体不要としてもよいと思います。
ただ、プログラムの流れでバックアップ処理を直後に書く場合、実際にはまだファイルが
できていない可能性も否定できない(遅延書き込みの可能性)ので、file.existをスピンロック的に
チェックしたほうが無難かもしれません。

まぁでも本来の問題は、XMLファイルのRead/Writeにかかる問題ではなく、電源ぶちぎりに対して
どうするかだとおもうので、コードの問題というよりは運用の問題をどうするかではないでしょうか。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Visual Basic User's Club 更新情報

Visual Basic User's Clubのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング