Страница 1 из 1

аналог GetFiles() на android

СообщениеДобавлено: 27 дек 2016, 22:41
xakmenpro
всем привет. в папке StreamingAssets есть изображения, методом GetFiles() я спокойно получаю массив из .jpg и .png файлов в редакторе. как это сделать на андроиде?

Re: аналог GetFilse() на android

СообщениеДобавлено: 28 дек 2016, 01:40
DbIMok

Re: аналог GetFilse() на android

СообщениеДобавлено: 30 дек 2016, 18:02
xakmenpro
DbIMok писал(а):https://docs.unity3d.com/Manual/StreamingAssets.html


Синтаксис:
Используется csharp
DirectoryInfo db_dir = new DirectoryInfo(@Application.dataPath + "/StreamingAssets/");
foreach (FileInfo file in db_dir.GetFiles())
{
if (file.Extension == ".jpg" || file.Extension == ".png")                  
     IMAGES.Add(file.Name);
}

-в редакторе работает
Синтаксис:
Используется csharp
DirectoryInfo db_dir = new DirectoryInfo(@"jar:file://" + Application.dataPath + "!/assets/");
foreach (FileInfo file in db_dir.GetFiles())
{
if (file.Extension == ".jpg" || file.Extension == ".png")                  
    IMAGES.Add(file.Name);
}

-на андроиде нет

Re: аналог GetFiles() на android

СообщениеДобавлено: 30 дек 2016, 19:25
DbIMok
On Android, the files are contained within a compressed .jar file (which is essentially the same format as standard zip-compressed files). This means that if you do not use Unity’s WWW class to retrieve the file, you need to use additional software to see inside the .jar archive and obtain the file.

На Android файлы содержатся в сжатом .jar-файле (который по сути того же формата, что стандартные zip-сжатые файлы). Это означает, что если Вы не используете класс Unity WWW, чтобы получить файл, то нужно использовать дополнительное программное обеспечение (ZIP библиотечку), чтобы увидеть внутри .jar архив и получить файл.
https://docs.unity3d.com/ScriptReferenc ... sPath.html

Re: аналог GetFiles() на android

СообщениеДобавлено: 05 янв 2017, 16:53
xakmenpro
DbIMok писал(а):
On Android, the files are contained within a compressed .jar file (which is essentially the same format as standard zip-compressed files). This means that if you do not use Unity’s WWW class to retrieve the file, you need to use additional software to see inside the .jar archive and obtain the file.

На Android файлы содержатся в сжатом .jar-файле (который по сути того же формата, что стандартные zip-сжатые файлы). Это означает, что если Вы не используете класс Unity WWW, чтобы получить файл, то нужно использовать дополнительное программное обеспечение (ZIP библиотечку), чтобы увидеть внутри .jar архив и получить файл.
https://docs.unity3d.com/ScriptReferenc ... sPath.html

это я читал, я просил рабочий пример. я нашел способ как получить файл с помощью www зная его имя, но я не могу получить это имя программно. мне нужно получить список всех изображений в папке в массив, а потом с помощью www я его загружаю туда куда мне нужно. не хотелось бы ради этого подключать стороннюю библиотеку, вот и ищу другой способ

Re: аналог GetFiles() на android

СообщениеДобавлено: 05 янв 2017, 17:14
Cr0c
Текстовик со списком файлов запихать в ассетсы?

Re: аналог GetFiles() на android

СообщениеДобавлено: 05 янв 2017, 20:00
xakmenpro
Cr0c писал(а):Текстовик со списком файлов запихать в ассетсы?

то есть?
у меня такая цель-запускаю прогу на андроиде и если программа была обновлена, сканирую папку "assets", она же StreamingAssets в юнити, если появились новые изображения, добавляю их имена в бд и после работаю уже с базой и извлекаю изображения с помощью WWW:
Синтаксис:
Используется csharp
IEnumerator loadImg(string name)
{
WWW www = new WWW("jar:file://" + Application.dataPath + "!/assets/" + name);
yield return www;
GetComponent<SpriteRenderer>().sprite = Sprite.Create(http://www.texture, new Rect(0.0f, 0.0f, http://www.texture.width, http://www.texture.height), new Vector2(0.5f, 0.5f), 100f);
}
нуно лишь получить список всех файлов в папке "assets", чтобы обновить базу, остальное все готово

Re: аналог GetFiles() на android

СообщениеДобавлено: 05 янв 2017, 20:50
DbIMok
Так вам и говорят, перед билдом поместите в StreamingAssets (или в Resources) list.txt и затем первым делом читайте его, а потом уже те имена, что в нем записаны.

Re: аналог GetFiles() на android

СообщениеДобавлено: 05 янв 2017, 22:29
xakmenpro
DbIMok писал(а):Так вам и говорят, перед билдом поместите в StreamingAssets (или в Resources) list.txt и затем первым делом читайте его, а потом уже те имена, что в нем записаны.

понял. я таким принципом пользуюсь щас. добавляю изображения в папку, база автоматически перезаписывается при запуске проекта в юнити. я хотел облегчить работу, чтобы не запускать каждый раз проект перед билдом или не прописывать имена изображений вручную или программно, сделать это уже в самом билде. ну ладно, есть хотя бы такая функция в юнити - запустить скрипт перед сборкой? чтобы обновить базу. я использую sqlite

Re: аналог GetFiles() на android

СообщениеДобавлено: 05 янв 2017, 23:41
Cr0c
xakmenpro писал(а):
DbIMok писал(а):Так вам и говорят, перед билдом поместите в StreamingAssets (или в Resources) list.txt и затем первым делом читайте его, а потом уже те имена, что в нем записаны.

понял. я таким принципом пользуюсь щас. добавляю изображения в папку, база автоматически перезаписывается при запуске проекта в юнити. я хотел облегчить работу, чтобы не запускать каждый раз проект перед билдом или не прописывать имена изображений вручную или программно, сделать это уже в самом билде. ну ладно, есть хотя бы такая функция в юнити - запустить скрипт перед сборкой? чтобы обновить базу. я использую sqlite

dir *.* /s/b /a-d >list.txt
создаст текстовик со списком файлов со всеми поддиректориями без лишней информации.

Re: аналог GetFiles() на android

СообщениеДобавлено: 06 янв 2017, 03:01
DbIMok
https://docs.unity3d.com/ScriptReferenc ... layer.html и перед/после делать свои действия

Re: аналог GetFiles() на android

СообщениеДобавлено: 10 янв 2017, 08:40
[bm]
Я делаю так:
качаем https://www.dropbox.com/s/mn7iwpipot8ns ... y.dll?dl=0 и копируем в Plugins
и получаем все файлы в билде:
Синтаксис:
Используется csharp
using Ionic.Zip;
...
var path = Application.dataPath;
using (var zip = ZipFile.Read(path))
{
        foreach (var e in zip.Entries)
        {
                Debug.Log(e.FileName);
        }
}


те что содержат путь assets/ и есть файлы в StreamingAssets