【问题标题】:List all files opened by my Android App列出我的 Android 应用程序打开的所有文件
【发布时间】: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>();
    }

【问题讨论】:

    标签: android xamarin io


    【解决方案1】:

    您可以在ADB shell 中使用Unix lsof 命令。

    1) 启动外壳:

    $ adb shell
    

    2) 查找应用的进程 ID:

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

    3) 列出您的应用打开的文件:

    shell@android:/ $ lsof <pid>
    

    【讨论】:

    • 你必须用 lsof 指定 -p:lsof -p &lt;pid&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多