英文:
C# Xamarin WriteAllBytes Proper Folder Path
问题
我试图将从mp3文件转换的一组字节写回到mp3文件,以便在用户移动设备上进行临时存储,但似乎无法获得正确的文件夹路径来进行写入。
我已经尝试使用 Directory.GetCurrentDirectory()
,Environment.CurrentDirectory
和这些变体来获取当前目录,但只收到空值或一个斜杠 /
,所以我不确定是否在这种情况下使用它们是否正确。唯一有效的获取路径的方法是 FileSystem.CacheDirectory
,它会给出 /data/user/0/com.companyname.lal/cache/
。
我认为如果我只是想临时存储这个mp3文件,然后在播放后立即删除它,这可能是使用Android和iOS的缓存的正确方法。它似乎有效,但是我无法找到我的Android模拟器文件位于哪个完整路径下的 /data/user/0/com.companyname.lal/cache/
。有一个 data
文件夹,但没有 user
或其他子文件夹。
正如我所说,我最终只想在用户移动设备上暂时写入并存储这个文件,然后在播放后将其删除,但现在我只需要找出如何写入文件,以便在代码中访问它。
英文:
I am trying to write a set of bytes converted from an mp3 file back to an mp3 file to temporarily store in a users mobile device but cannot seem to get the right folder path of where to write to.
I have tried using Directory.GetCurrentDirectory()
, Environment.CurrentDirectory
, and other variations of these to get the current directory but am only getting back null or just one /
, so I'm not sure if I am using these right for this scenario. The only method of getting any path I have found to work is FileSystem.CacheDirectory
which gives /data/user/0/com.companyname.lal/cache/
.
I think if I am just temporarily wanting to store this mp3 file and then delete it soon after it plays this is maybe the right idea using the cache for both Android and iOS. It appears to work, however I cannot find this /data/user/0/com.companyname.lal/cache/
full path of where my android emulator files are located. There is a data
folder but no user
or any of those other subfolders.
Like I said I am ultimately wanting to just write and store this file temporarily on a user's mobile device that I can delete it soon after playing, but for now I need to just figure out how to write the file at all where it can be accessed in code.
答案1
得分: 1
正如Jason所说,您可以使用Environment.SpecialFolder
和Environment.GetFolderPath
方法来选择适当的位置来存储和检索文件,以下代码将文件存储在系统目录中:
File.WriteAllBytes(Environment.GetFolderPath(Environment.SpecialFolder.System), test);
如果系统目录返回为空,您可以使用ApplicationData
来获取应用数据的路径。我创建了一个Xamarin.Forms项目并在iOS和Android模拟器上进行了测试,可以成功返回路径。
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
有关方法的更多信息,您可以参考官方文档:
更新: 如果您需要读取文件,例如使用WriteAllBytes
:
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "xxx");
File.WriteAllBytes(fileName, XXX);
var test = File.ReadAllBytes(fileName);
有关更多详细信息,请参考:Xamarin.Forms中的文件处理
英文:
As Jason said, you can use the Environment.SpecialFolder and Environment.GetFolderPath methods to select a suitable location for storage and recall, the following code stores the file in the System directory:
File.WriteAllBytes(Environment.GetFolderPath(Environment.SpecialFolder.System),test);
If the System directory returns empty, you can use ApplicationData
to get the path of the appdate. I created a Xamarin.Forms project and tested it on both iOS and Android simulators, and the path can be returned successfully.
var path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
For more information on the use of methods, you can refer to the official documentation:
Environment.SpecialFolder Enum
Environment.GetFolderPath Method
Update: If you need to read a file, for example if you use WriteAllBytes
:
string fileName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "xxx");
File.WriteAllBytes(fileName, XXX);
var test=File.ReadAllBytes(fileName);
For more details, please refer to: File Handling in Xamarin.Forms
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论