C# 如何将文件从独立存储复制到下载文件夹?
我正在尝试将数据库文件从独立存储复制到下载文件夹(或用户可以访问的任何文件夹) 当前我的数据库存储在:C# 如何将文件从独立存储复制到下载文件夹?,c#,xamarin,xamarin.forms,xamarin.android,file-copying,C#,Xamarin,Xamarin.forms,Xamarin.android,File Copying,我正在尝试将数据库文件从独立存储复制到下载文件夹(或用户可以访问的任何文件夹) 当前我的数据库存储在: /data/user/0/com.companyname.appname/files/Databases/MyDatabase.db 我尝试使用以下代码: public string GetCustomFilePath(string folder, string filename) { var docFolder = System.Environment.GetFolderPath(
/data/user/0/com.companyname.appname/files/Databases/MyDatabase.db
我尝试使用以下代码:
public string GetCustomFilePath(string folder, string filename)
{
var docFolder = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
var libFolder = Path.Combine(docFolder, folder);
if (!Directory.Exists(libFolder))
Directory.CreateDirectory(libFolder);
return Path.Combine(libFolder, filename);
}
var bas = GetDatabaseFilePath("MyDatabase.db");
var des = Path.Combine(Android.OS.Environment.DirectoryDownloads, "MyDatabase.db");
File.Copy(bas, des);
Android.OS.Environment.DirectoryDownloads
属性返回路径Download
,即下载文件夹的名称。但是
File.Copy()
抛出异常
System.IO.DirectoryNotFoundException:未找到目标目录:
下载
我以前试过像这样使用斜杠:/Download/MyDatabase.db
,但运气不好
有没有办法复制这样的文件?我需要任何权限吗?1st)是的,您确实需要权限才能写入外部存储
您可以通过自己操作获得所需的运行时权限:
PermissionsPlugin
Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads
要获取设备公共下载文件夹的路径,即使用表单依赖项服务,请执行以下操作:
public interface IDownloadPath
{
string Get();
}
public class DownloadPath_Android : IDownloadPath
{
public string Get()
{
return Path.Combine(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath, Android.OS.Environment.DirectoryDownloads);
}
}
public void Handle_Button(object sender, System.EventArgs e)
{
var fileName = "someFile.txt";
using (var stream = File.Create(Path.Combine(FileSystem.CacheDirectory, fileName)))
{
// just creating a dummy file to copy (in the cache dir using Xamarin.Essentials
}
var downloadPath = DependencyService.Get<IDownloadPath>().Get();
File.Copy(Path.Combine(FileSystem.CacheDirectory, fileName), downloadPath);
}
public void Handle_按钮(对象发送方,System.EventArgs e)
{
var fileName=“someFile.txt”;
使用(var stream=File.Create(Path.Combine(FileSystem.CacheDirectory,fileName)))
{
//只是创建一个要复制的虚拟文件(在缓存目录中使用Xamarin.Essentials)
}
var downloadPath=DependencyService.Get().Get();
File.Copy(Path.Combine(FileSystem.CacheDirectory,fileName),downloadPath);
}
您不能只写入下载文件夹。您可以使用DownloadManager将文件保存到下载文件夹。您需要外部存储权限才能写入“下载”,一旦你有了它,你就可以使用Android.OS.Environment.ExternalStorageDirectory
来获取下载文件夹的路径,并使用标准的.NetFile.Copy
api…那么“Assets”文件夹中的文件呢?我想尼克想说的是“/data/user/0/com.companyname.appname/files/Databases/MyDatabase.db”无法识别。虚拟文件工作正常,因为它当前处于打开状态。打开一个.pdf文件,然后将其复制到下载目录,可以吗?