我已经构建了一个应用程序,在该应用程序中我从服务器获取文件和文件夹(使用 .net Web 服务),我有类广播接收器,我想在其中实现一种方法,应用程序调用服务检查是否存在新版本以及是否是的,然后用我创建的本地sqlite数据库中的新文件替换...我的问题是如何将旧文件替换为从服务器到本地sqlite数据库的新文件?
编辑:用手机存储中的旧文件替换新文件。
我已经构建了一个应用程序,在该应用程序中我从服务器获取文件和文件夹(使用 .net Web 服务),我有类广播接收器,我想在其中实现一种方法,应用程序调用服务检查是否存在新版本以及是否是的,然后用我创建的本地sqlite数据库中的新文件替换...我的问题是如何将旧文件替换为从服务器到本地sqlite数据库的新文件?
编辑:用手机存储中的旧文件替换新文件。
如果我正确理解您的问题,您正在尝试使用从 Web 服务器检索到的新文件更新本地手机存储上的本地文件,对吗?
要在本地更新文件,我假设您有两个文件路径数组 oldFilePaths 和 newFilePaths
我只会迭代并删除旧的,然后将新的放在这样的位置:
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 相差不远