我正在尝试将目录中的文件添加到微调器列表中,但我什么也没有得到,(微调器列表为空)但文件夹中包含 3 个文件。
我检查了文件夹是否存在,(文件夹存在)
然后我尝试显示一条消息,告知文件夹中是否找到任何文件(我没有收到消息)
这是我到目前为止所尝试的:
public class MainActivity : Activity
{
Button btnGetFiles;
Spinner spinnerGetFiles;
List<string> fileList;
protected override void OnCreate(Bundle savedInstanceState)
{
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.Main);
spinnerGetFiles = FindViewById<Spinner>(Resource.Id.spinnerGetFiles);
btnGetFiles = FindViewById<Button>(Resource.Id.btnGetFiles);
btnGetFiles.Click += delegate
{
fileList = GetFilesFromDirectory("/storage/emulated/0/MyFolder");
ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, fileList);
spinnerGetFiles.Adapter = adapter;
};
}
List<string> GetFilesFromDirectory(string strDirectoryPath)
{
List<string> files = new List<string>();
if (Directory.Exists(strDirectoryPath))
{
Toast.MakeText(Application.Context, "Directory found", ToastLength.Long).Show();
string[] fileList2 = Directory.GetFiles(strDirectoryPath);
foreach (string file in fileList2)
{
files.Add(Path.GetFileName(file));
Toast.MakeText(Application.Context, "File found : " + file, ToastLength.Long).Show();
}
}
else { Toast.MakeText(Application.Context, "No directory was found!!", ToastLength.Long).Show(); }
return files;
}
}
从您访问的存储(
/storage/emulated/0/
)中,我们可以发现您想要访问external storage
。
要访问外部存储,我们需要添加外部存储权限,如下:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
并且我们还需要在Android 6.0(API级别23)之后添加运行时权限。
这里有一个关于如何访问
external storage
的官方示例,您可以在这里查看:本地文件。
欲了解更多信息,您可以查看:外部存储。
作为测试,我在示例代码中添加了一个按钮,以使用以下代码获取生成的文件
count.txt
本地文件,它可以正确列出文件:
List<string> GetFilesFromDirectory(string strDirectoryPath)
{
List<string> files = new List<string>();
string dir = GetExternalFilesDir(null).AbsolutePath;
if (Directory.Exists(dir))
{
Toast.MakeText(Application.Context, "Directory found", ToastLength.Long).Show();
string[] fileList2 = Directory.GetFiles(dir);
System.Diagnostics.Debug.WriteLine("the number of files is: " + fileList2.Count());
foreach (string file in fileList2)
{
files.Add(Path.GetFileName(file));
Toast.MakeText(Application.Context, "File found : " + file, ToastLength.Long).Show();
}
}
else { Toast.MakeText(Application.Context, "No directory was found!!", ToastLength.Long).Show(); }
return files;
}