我有一個跟蹤用戶位置的WP7應用程序。所有工作都很好,除了我想將位置寫入GeoCoordinate監視器的位置更改事件上的隔離存儲器,並且我一直收到「IsolatedStorageFileStream中不允許的操作」消息。任何人都可以幫助獲得這個工作?F#windows手機隔離存儲和XML
保存座標文件中的成員是:
let xname n = XName.op_Implicit(n)
let xdoc (el: seq<XElement>) = new XDocument(Array.map box (Array.ofSeq el))
let xelem s el = new XElement(xname s, box el)
let xstr s = box s
member this.createLocationsFile latitude longitude =
try
let doc : XDocument =
xdoc
[xelem "root"
[xelem "location"
[(xelem "latitude" (xstr latitude))
(xelem "longitude" (xstr longitude))
]
]
]
use store = IsolatedStorageFile.GetUserStoreForApplication()
if not (store.FileExists("locations.xml")) then
let file = new IsolatedStorageFileStream("locations.xml", IO.FileMode.Create, store)
doc.Save(file)
else
let file = new IsolatedStorageFileStream("locations.xml", IO.FileMode.Open, store)
let docAmended : XDocument = XDocument.Load(file)
let elementToAdd =
docAmended.Element(xname "root").Add(
[xelem "location"
[(xelem "latitude" (xstr latitude))
(xelem "longitude" (xstr longitude))
]
])
docAmended.Save(file)
with
| :? IsolatedStorageException as ex -> MessageBox.Show("Error saving file: " + ex.Message) |> ignore
| _ -> MessageBox.Show("Unable to open file") |> ignore
而且PositionChangedEventHandler是:
let MyPositionChanged(e : GeoPositionChangedEventArgs<GeoCoordinate>, map : Map, ellipse : Ellipse) =
let ppLoc = new GeoCoordinate(e.Position.Location.Latitude, e.Position.Location.Longitude)
map.SetView(ppLoc, 10.0)
//do layer.AddChild(ellipse, ppLoc)
ellipse.Visibility <- System.Windows.Visibility.Visible
let iso = new IsolatedStorageHelper()
let lat = ppLoc.Latitude.ToString()
let lon = ppLoc.Longitude.ToString()
do iso.createLocationsFile lat lon
錯誤聽起來像是東西在孤立的存儲保存文件。查看您是否可以在createLocationsFile事件的if和else情況下處理該文件的句柄。不幸的是,我不是F#呃,對不起,但這就是我要在C#代碼中檢查的內容。 – Eugene 2012-04-16 09:20:31
你沒有處理'IsolatedStorageFileStream'實例。嘗試用'use file = ...'替換'let file = ...'。 – pad 2012-04-16 10:50:26