F#PCL和System.IO.FileStream
我正在用F#编写一个PCL,并且我正在尝试将一些东西写入磁盘。所有的PCL示例都在VB.NET和C中,而这些示例在F中不起作用。具体而言,我有以下代码:F#PCL和System.IO.FileStream,f#,F#,我正在用F#编写一个PCL,并且我正在尝试将一些东西写入磁盘。所有的PCL示例都在VB.NET和C中,而这些示例在F中不起作用。具体而言,我有以下代码: type FileSystemStockProvider(filePath:string) = member this.PutData(stockData) = let serializedData = stockData |> Seq.map(fu
type FileSystemStockProvider(filePath:string) =
member this.PutData(stockData) =
let serializedData = stockData
|> Seq.map(fun row -> JsonConvert.SerializeObject(row))
let outFile = new System.IO.StreamWriter(filePath)
outFile.Write(serializedData)
问题是F#中的System.IO.StreamWriter没有磁盘过载,因此无法编译。有人对如何使用PCL写入磁盘有什么建议吗
提前感谢确认,您要查找的过载丢失了。然而,我不认为这是一个错误,因为C#和F#的.net框架中缺少它。这不是F#specific。我预期的原因是因为不同移动和跨平台设备上的沙盒要求。因此,我们使用的Windows/Linux路径名不再普遍适用 看。使用Nuget检索 为了减少getFileStream中的步骤数,在c:\或\\networkPath中,甚至在基于url的ArootWithEwreservedw中,可能有一些空间来进行一些字符串解析ords://the/path/to/the/file.json 有点像 顺便说一句:在代码中处理文件流时出现问题。您需要显式地使用use/use/dispose技术之一。你肯定没有看到超载吗
namespace PortableLibrary1
open Newtonsoft.Json
[<JsonObject>]
type TestType() =
[<JsonProperty>]
member val Property2 = "testData" with get, set
type FileSystemStockProvider(filePath:string) =
//let getFileStream folder file =
// // for windows / linux?
// new System.IO.StreamWriter("c:\\" + folder + "\\" + filePath)
let getFileStream folder file =
let rootFolder = PCLStorage.FileSystem.Current.LocalStorage
let folder = rootFolder.CreateFolderAsync(folder,PCLStorage.CreationCollisionOption.OpenIfExists).Result
let file = folder.CreateFileAsync(file, PCLStorage.CreationCollisionOption.ReplaceExisting).Result
file.OpenAsync(PCLStorage.FileAccess.ReadAndWrite).Result
member __.PutData(stockData) =
let fs = getFileStream "theFolder" "theFile.json"
use outFile = new System.IO.StreamWriter(fs)
stockData |> Seq.iter (JsonConvert.SerializeObject >> outFile.Write)
命名空间可移植库1
打开Newtonsoft.Json
[]
类型TestType()=
[]
带有get、set的成员val Property2=“testData”
键入FileSystemStockProvider(文件路径:字符串)=
//让getFileStream文件夹文件=
////对于windows/linux?
//新System.IO.StreamWriter(“c:\\”+文件夹+“\\”+文件路径)
让getFileStream文件夹文件=
让rootFolder=PCLStorage.FileSystem.Current.LocalStorage
让folder=rootFolder.CreateFolderAsync(文件夹,PCLStorage.CreationCollisionOption.OpenIfExists)。结果
让file=folder.CreateFileAsync(文件,PCLStorage.CreationCollisionOption.ReplaceExisting).Result
file.OpenAsync(PCLStorage.FileAccess.ReadAndWrite).Result
成员PutData(stockData)=
让fs=getFileStream“theFolder”“theFile.json”
使用outFile=new System.IO.StreamWriter(fs)
stockData |>Seq.iter(JsonConvert.SerializeObject>>outFile.Write)
也许我没有遵循,但是您在C#中看到的StreamWriter与在F#中看到的是相同的(具有相同的重载等)。你的代码。那把小提琴的目标是4.5。在PCL中,据我所知,该过载不可用。对于Windows应用商店应用,请查看。您应该做一些eta降低;):stockData |>Seq.iter(JsonConvert.SerializeObject>>outFile.Write)
@CarstenKönig:包括你的建议你在PCL中这样做了吗?@JamieDixon:我使用FSI犯了一个错误。上面提供了使用PCLStorage的更正。98%的更改在getFileStream中。