Форум » Общие вопросы по WME » Чтение файлов. » Ответить

Чтение файлов.

Spawn: Помогите разобраться с чтением файлов. Создается и записывается все корректно, а прочитать не могу. Напишите, как правильно зацепить файл. Использую SetFilename, но работает что-то некорректно: var SomeFile; SomeFile.SetFileName ([путь до файла]); SomeFile.OpenAsText(1);

Ответов - 19

Pipec: Как проявляется некорректная работа?

Spawn: В логи ошибки пишет на строчки. Просто напишите последовательность скриптов, как должно выглядеть. Я примеры нигде не могу найти. поэтому и туплю.

Pipec: Если строчки кода в твоем первом посте взяты прямо из скрипта, то у тебя там синтаксическая ошибка - вместо SetFileName надо писать SetFilename. Далее, вот код который создает файл var SomeFile = new File("test.txt"); SomeFile.OpenAsText(2); SomeFile.WriteText("Test"); SomeFile.Close(); Вот код, который из этого файла читает SomeFile.SetFilename("test.txt"); SomeFile.OpenAsText(1); Game.Msg(SomeFile.ReadText(4)); SomeFile.Close(); Все работает. Не забываем про основное правило работы с файлами. Каждый открытый файл в последствии должен быть закрыт. Перед каждой сменой режима работы с файлом (чтение/запись) его нужно закрыть, если он был открыт


Spawn: Вот мой скрипт. Не работает. В чем отличие не понимаю. (считаем, что проверка на существование Game.FileExist сделана выше, с ней никаких проблем) var SomeFile; SomeFile.SetFilename("test.txt"); Хотя полный вариант выглядит, как SomeFile.SetFilename(Game.SaveDirectory + "\test.txt"); SomeFile.OpenAsText(1); Game.Msg(SomeFile.ReadText(4)); SomeFile.Close();

Pipec: Вот где ошибка var SomeFile; Должно быть var SomeFile = new File("test.txt"); даже при условии, что файл существует. Этой командой ты не создаешь новый файл, а создаешь объект "файл" в игре, через который общаешься с физическим файлом. Теперь, если ты его откроешь для записи, он перезапишится, а чтобы изменять его содержимое нужен режим append

Spawn: А что тогда делает SomeFile.SetFilename("test.txt"); и зачем это нужно ? Еще такая проблема пояявилась, когда использую Game.FileExists(Game.SaveDirectory + "\test.txt"); )то в логе пишится ошибка WARNING: Referencing absolute path 'C:\Documents and Settings\USER\My Documents\GAME'. The game will NOT work on another computer.

Dionysius: SomeFile.SetFilename("test.txt") можно использовать когда ты создаешь объект без указания конкретного файла var SomeFile = new File() Потом ты можешь привязать к этому объекту другой файл. А на WARNING просто не обращай внимания.

Spawn: Обнаружилась странная проблема var SomeFile = new File(Game.SaveDirectory + "\save.game"); SomeFile.OpenAsText(2); SomeFile.WriteText("Text"); SomeFile.Close (); Ругается на строчку SomeFile.WriteText("Text"); Runtime error. File.WriteText: File must be open for writing in text mode. Раньше все (вроде бы) было нормально, т.е. я эти скрипты уже давно не трогал, потому что все работало корректно. Т.е. проблема в том, что не создается папка (с названием игры) в My Documents. Если я сам ее создаю, то все работает нормально.

Spawn: Вопрос снимается. Упустил из виду Directory object

Vadimys: Вопрос: var SomeFile = new File("Text\ProfilesNames.txt"); SomeFile.OpenAsText(1); for (var j = 0; j<5;j=j+1) { ProfileList[j] = SomeFile.ReadLine(); } SomeFile.Close(); SomeFile.OpenAsText(2); for (var i = 0; i<5;i=i+1) { SomeFile.WriteLine(ProfileList); } SomeFile.Close(); Выдаёт: 22:05: Runtime error. Script 'Window\ProfileNameWin.script', line 46(SomeFile.WriteLine(ProfileList);) 22:05: File.WriteLine: File must be open for writing in text mode. Из файла читает нормально, а записывать почему то не хочет :( Если же путь прописывать как (Directory.CurrentDirectory + "\ProfilesNames.txt") то ошибки нет, но тогда файл валяеться рядом с екзешником, что есть не очень красиво)

Pipec: Проверь, возвращает ли SomeFile.OpenAsText(2); значение true Скрипт проверил - у меня работает. SomeFile.WriteLine(ProfileList) нужно заменить на SomeFile.WriteLine(ProfileList[і]). Опечатка наверное

Dionysius: Опечатка наверное Я сперва тоже так подумал. Это просто движок форума скрыл квадратные скобочки в сообщении. Видимо, принял их за BB-код.

Vadimys: Да, опечатки не было, форум захавал скобки, и пол текста стало курсивом SomeFile.OpenAsText(2) Возвращает False, в то время как SomeFile.OpenAsText(1) успешно возвращает true, accessmode переменной SomeFile при попытке открыть в режиме writing соответственно не меняеться :( Пробовал открывать в режиме appending, и не закрывать файл, не помогает :( Пока помогает только переписать путь как (Directory.CurrentDirectory + "\ProfilesNames.txt").

Pipec: Странно. У меня все фурычит. У теба какая версия движка? У меня последняя бета V.1.8.009 Ты с файлом еще какие-то действия прежде выполняешь? И еще на всякий случай, покажи лог целиком

Vadimys: Версия движка: V.1.8.009. Прежде с файлом действий никаких( Код: var SomeFile = new File("Text\ProfilesNames.txt"); SomeFile.OpenAsText(2); for (i = 0; i<5;i=i+1) { SomeFile.WriteLine(ProfileList" i в квадратных скобочках"); } Лог: 00:06: ********** DEBUG LOG OPENED 11-02-2009 (Release Build) ***************** 00:06: Wintermute Engine ver 1.8.9beta, Compiled on Dec 20 2008, 13:01:44 00:06: Platform: Windows XP Service Pack 2 (Build 2600) 00:06: DirectX version: 9.0 00:06: 00:06: Scanning packages... 00:06: Registered 0 files in 0 package(s) 00:06: Initializing scripting engine... 00:06: Script compiler bound successfuly 00:06: Loading plugins... 00:06: wme_sample_pixel.dll 00:06: wme_snow.dll 00:06: Loading string table... 00:06: 49 strings loaded 00:06: Enumerating Direct3D devices... 00:06: Enumerating DirectSound devices... 00:06: Game aspect ratio: 1.333333 00:06: Monitor aspect ratio: 1.333333 00:06: Game aspect ratio is the same as monitor aspect ratio. 00:06: Backup resolution: 1024 x 768 00:06: 00:06: Available video devices: 00:06: NVIDIA GeForce 6600 (accelerated) 00:06: Driver: nv4_disp.dll 6.14.10.9131 00:06: Monitor: 0 00:06: Available audio devices: 00:06: Первичный звуковой драйвер 00:06: SB Live! звуковое устройство 00:06: [no sound] 00:06: 00:06: User selected: 00:06: Using requested resolution (1024 x 768) 00:06: Video: NVIDIA GeForce 6600 (accelerated) 00:06: Windowed:no Colors:32bit T&L:no Multisample:0 00:06: Audio: Первичный звуковой драйвер 00:06: Maximum texture size: 4096x4096 00:06: Engine initialized in 58 ms 00:06: 00:06: Runtime error. Script 'Window\ProfileNameWin.script', line 67 00:06: File.WriteLine: File must be open for writing in text mode. 00:06: Runtime error. Script 'Window\ProfileNameWin.script', line 67 00:06: File.WriteLine: File must be open for writing in text mode. 00:06: Runtime error. Script 'Window\ProfileNameWin.script', line 67 00:06: File.WriteLine: File must be open for writing in text mode. 00:06: Runtime error. Script 'Window\ProfileNameWin.script', line 67 00:06: File.WriteLine: File must be open for writing in text mode. 00:06: Runtime error. Script 'Window\ProfileNameWin.script', line 67 00:06: File.WriteLine: File must be open for writing in text mode. 00:07: 00:07: Shutting down... 00:07: Shutting down scripting engine 00:07: ********** DEBUG LOG CLOSED ********************************************

Pipec: Поставил на txt файл атрибут "только чтение" и получил твою ошибку. Может в этом проблема? Проверь

Vadimys: Это я проверил в первую очередь, перепроверил всё ещё раз, всё как прежде

Pipec: Вот wme проект: http://rapidshare.com/files/196888059/1.zip.html Это пустой проект на основе шаблона. В файле scenes\Room\scr\scene_init.script в самом начале находится твой код В Text\ProfilesNames.txt файле пять строк с цифрами от 1 до 5. Запусти проект на исполнение и сразу выходи. Если все ок, то в файле Text\ProfilesNames.txt строки будут в обратном порядке от 5 до 1. Т.е. файл открывается для чтения, читается в массив, а потом перезаписывается в обратном порядке. У меня все работает (смотри лог). Проверь, что получается у тебя.

Vadimys: Всё, сработало!:) И я сразу понял в чёс проблема у меня была: У меня папка Техт лежала в папке Data, хоть при этом и функция Copy Filename и даёт тот же самый путь, если файлы лежат в папке проекта:) Перенёс папку, и всё заработало!) Огромное Спасибо!!! :)))) Правда теперь если скомпилить проект, то тогда игра отказываеться работать с файлами вообще, так что всё равно придёться делать их "внешними" -_-



полная версия страницы