【发布时间】:2016-02-22 15:48:12
【问题描述】:
当我尝试在 Xamarin / Android 应用程序中写入文本文件时,我间歇性地收到太多打开文件异常。 我知道这是因为每个 Android 应用程序对其可以打开的文件数量都有限制,显然我的应用程序在某些情况下超过了它。因此,我必须让一些文件打开/没有在某处正确处理它们。 我想知道我是否可以以编程方式列出我的应用程序在任何给定时间打开的文件?显然操作系统知道这一点,是否可以从我的应用程序中执行此操作?这将帮助我找到问题。
感谢提琴手,这就是我解决它的方法,以防其他人将来需要这样做(在 C#/Xamarin 中):
private static List<string> m_commandData;
private static void GetOpenedFiles()
{
m_commandData = new List<string>();
RunCommand("lsof");
RunCommand("ps | grep TestNoFilesOpen");
}
private static void RunCommand(string command)
{
string data;
using (Java.Lang.Process process = Java.Lang.Runtime.GetRuntime().Exec(command))
{
Stream stream = process.InputStream;
StreamReader bodyReader = new StreamReader(stream);
data = bodyReader.ReadToEnd();
}
m_commandData.Add(data);
}
private static void WriteCommands()
{
for (int i = 0; i < m_commandData.Count; i++)
{
using (TextWriter tw = new StreamWriter(Android.OS.Environment.ExternalStorageDirectory.AbsolutePath + "/NoFilesOpen/adb_" + i.ToString() + ".txt"))
{
tw.Write(m_commandData[i]);
tw.Close();
}
}
m_commandData = new List<string>();
}
【问题讨论】: