Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
列出我的Android应用程序打开的所有文件_Android_Xamarin_Io - Fatal编程技术网

列出我的Android应用程序打开的所有文件

列出我的Android应用程序打开的所有文件,android,xamarin,io,Android,Xamarin,Io,当我尝试在Xamarin/Android应用程序中写入文本文件时,我会间歇性地收到太多打开文件异常。 我明白这是因为每个安卓应用程序都有一个可以打开的文件数量限制,显然我的应用程序在某些情况下超过了它。因此,我必须将一些文件保留在打开状态/未在某处正确处理它们。 我想知道我是否可以通过编程列出我的应用程序在任何给定时间打开的文件?显然,操作系统知道这一点,是否可以在我的应用程序中实现这一点?这将帮助我找到问题所在 多亏了fiddler,我才解决了这个问题,以防将来有人需要(在C#/Xamarin

当我尝试在Xamarin/Android应用程序中写入文本文件时,我会间歇性地收到太多打开文件异常。 我明白这是因为每个安卓应用程序都有一个可以打开的文件数量限制,显然我的应用程序在某些情况下超过了它。因此,我必须将一些文件保留在打开状态/未在某处正确处理它们。 我想知道我是否可以通过编程列出我的应用程序在任何给定时间打开的文件?显然,操作系统知道这一点,是否可以在我的应用程序中实现这一点?这将帮助我找到问题所在

多亏了fiddler,我才解决了这个问题,以防将来有人需要(在C#/Xamarin中):

私有静态列表m_commandData;
私有静态void GetOpenedFiles()
{
m_commandData=新列表();
运行命令(“lsof”);
RunCommand(“ps | grep TestNoFilesOpen”);
}
专用静态void RunCommand(字符串命令)
{
字符串数据;
使用(Java.Lang.Process Process=Java.Lang.Runtime.GetRuntime().Exec(命令))
{
Stream=process.InputStream;
StreamReader bodyReader=新的StreamReader(流);
data=bodyReader.ReadToEnd();
}
m_commandData.Add(数据);
}
私有静态void writeCommand()
{
对于(int i=0;i
您可以在中使用Unix命令

1) 启动shell:

$ adb shell
2) 查找应用程序的进程ID:

shell@android:/ $ ps | grep <packagename>
shell@android:/ $ lsof <pid>
shell@android:/$ps | grep
3) 列出应用程序打开的文件:

shell@android:/ $ ps | grep <packagename>
shell@android:/ $ lsof <pid>
shell@android:/$lsof

必须使用lsof指定-p:
lsof-p