0

アプリケーションが開始されると、テキストファイルの更新チェックが実行されます。リモート ファイルのバージョン番号がローカルのバージョン番号よりも大きい場合、リモート ファイルは分離ストレージに保存され、現在のファイルと置き換えられます。残念ながら、期待どおりには機能しません。ストレージにはまだ古いファイルがあります。

    public static bool WriteFileToIsolatedStorage(String content, String fileName)
    {
        bool result = false;

        MessageBox.Show(Leser.GetVersionInfo(content));

        IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();
        StreamWriter writer = new StreamWriter(new IsolatedStorageFileStream(fileName, FileMode.Truncate, store));

        try
        {
            writer.Write(content);
            writer.Flush();
            writer.Close();

            result = true;
        }
        catch
        {
            result = false;
        }

        return result;
    }

「Create」や「​​Truncate」などのいくつかの FileMode パラメータを試しましたが、アプリケーションを再起動すると、常に更新が利用可能になります。ストレージへの書き込み中にエラーは発生しませんが、バージョン番号は正しく動作しなかったことを示しています。

プロジェクト エクスプローラーに、上記のように更新する必要があるデータを含むテキスト ファイルがあります。最初にこのファイルのストレージを確認し、見つからない場合はそこに書き込みます。これは期待どおりに機能します。しかし、更新されたバージョンは書かれておらず、その理由がわかりません。

解決策: 書き込みは正常に機能します :) 問題は、IsolatedStorage に保存されたファイルではなく、リソース ファイルを読み取ったことです。

    public static String ReadFileContents(String file)
    {
        String content = String.Empty;

        var ResourceStream = Application.GetResourceStream(new Uri(file, UriKind.Relative));
        if (ResourceStream != null)
        {
            Stream myFileStream = ResourceStream.Stream;
            if (myFileStream.CanRead)
            {
                StreamReader myStreamReader = new StreamReader(myFileStream);
                content = myStreamReader.ReadToEnd();
            }
        }

        return content;
    }

ごめんなさい!

4

2 に答える 2

1

ファイルを作成して置き換えるために使用したコードは次のとおりです....キーワードTruncate to Createを変更するだけで役立ちます。

public static bool WriteFileToIsolatedStorage(String content, String fileName)
    {
        bool result = false;

        //MessageBox.Show(Leser.GetVersionInfo(content));

        IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication();

        StreamWriter writer = new StreamWriter(new IsolatedStorageFileStream(fileName, FileMode.Create, store));

        try
        {
            writer.Write(content);
            writer.Flush();
            writer.Close();

            result = true;
        }
        catch
        {
            result = false;
        }

        StreamReader reader = new StreamReader(new IsolatedStorageFileStream(fileName, FileMode.Open, store));
        string rawData = reader.ReadToEnd();
        reader.Close();


        return result;
    }

ストリームリーダーが置き換えられていることを確認するためだけに使用しました:)

于 2013-01-22T06:35:40.210 に答える
0

あなたのコードに明らかな問題はありませんが、これを試してください:

    public static bool WriteFileToIsolatedStorage(String content, String fileName)
    {
        bool result = false;

        MessageBox.Show(Leser.GetVersionInfo(content));
        try
        {
            using (IsolatedStorageFile store = IsolatedStorageFile.GetUserStoreForApplication())
            using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileName, FileMode.Truncate, store))
            using (StreamWriter writer = new StreamWriter(stream))
            {
                writer.Write(content);

                result = true;
            }
        }
        catch
        {
            result = false;
        }

        return result;
    }

インスタンス化したものを破棄することは良い考えであるだけでなく、すべてがフラッシュされて閉じられることを保証する必要があります (これはおそらく StreamWriter で暗黙的に行われるため、これは暗闇でのショットのようなものです)。

于 2013-01-22T02:45:07.550 に答える