1

サーバーからファイルとフォルダーを取得するアプリケーションを構築しました (.net Web サービスを使用)。アプリ呼び出しサービスが新しいバージョンがあるかどうかをチェックするメソッドを実装するクラス ブロードキャスト レシーバーがあります。はい、作成したローカルsqliteデータベースの新しいファイルに置き換えます...私の質問は、古いファイルをサーバーからローカルsqliteデータベースに新しいファイルに置き換える方法です?

編集: 新しいファイルを携帯電話のストレージ内の古いファイルに置き換えます。

4

1 に答える 1

0

あなたの質問が正しく理解できた場合、Web サーバーから取得した新しいファイルを使用して、ローカルの電話ストレージのローカル ファイルを更新しようとしているということでよろしいですか??

ファイルをローカルで更新するには、oldFilePaths と newFilePaths の 2 つのファイルパスの配列があると仮定します。

古いものを繰り返して削除し、新しいものを次のように配置します。

foreach(var oldFilePath in foldFilePaths)
{
    var oldFileName = Path.GetFileName(oldFilePath);
    // This assumes that your files (old and new Ones have the same name). 
    // And that you are saving your new files in a temporary folder.
    var newFilePath = newFilePaths.ToList().FirstOrDefault(f => Path.GetFileName(f) == oldFileName);
    if (newFilePath != null)
    {
        File.Delete(oldFilePath);
        File.Copy(newFilePath, oldFilePath);
    }
}

ここで、データベース内のファイル パスを更新することもできます。データベース内のファイル名に一意の識別子があると仮定します。これを行うには、次のようにします。

const string selectSqlQuery = "SELECT FileID, FilePath FROM FILES";
var updateSqlQuery = "UPDATE FILES SET FilePath = '{0}' WHERE FileID = '{1}'"; 
var oldFilesList = new List<MyFile>(); // assuming you have object of MyFile {Id, FilePath};

using(var connection = new SqliteConnection(connectionString))
{
    connection.Open();

    // reading old files from Database
    using (var command = connection.Command())
    {
      command.CommandText = selectSqlQuery;
       IDataReader reader = dbcmd.ExecuteReader();
       while(reader.Read()) 
       {
            oldFilesList.Add(new MyFile { Id = reader["Id"], FilePath = reader["FilePath"] });
       }
    }

    // updating new filePaths, assuming that you have newFilesList from calling the web service
    foreach(var oldFile in oldFilesList)
    {
        var newFile = newFilesList.ToList().FirstOrDefault(f => f.Id == oldFile.Id);
        if (newFile != null)
        {
            using (var command = connection.CreateCommand())
            {
                command.CommandText = string.Format(updateSqlQuery, newFile.Id, newFile.FilePath);
                command.ExecuteNonQuery();
            }       
        }
    }
}

// 上記のコードは C# (MonoDroid) で書かれています。これは私が使用しているものであり、Java から遠く離れているとは思わないからです。

于 2013-05-04T04:11:02.173 に答える