Помогите разобраться с чтением файлов. Создается и записывается все корректно, а прочитать не могу. Напишите, как правильно зацепить файл. Использую SetFilename, но работает что-то некорректно: var SomeFile; SomeFile.SetFileName ([путь до файла]); SomeFile.OpenAsText(1);
Все работает. Не забываем про основное правило работы с файлами. Каждый открытый файл в последствии должен быть закрыт. Перед каждой сменой режима работы с файлом (чтение/запись) его нужно закрыть, если он был открыт
Отправлено: 27.10.08 23:07. Заголовок: Вот мой скрипт. Не р..
Вот мой скрипт. Не работает. В чем отличие не понимаю.
(считаем, что проверка на существование Game.FileExist сделана выше, с ней никаких проблем)
var SomeFile; SomeFile.SetFilename("test.txt"); Хотя полный вариант выглядит, как SomeFile.SetFilename(Game.SaveDirectory + "\test.txt"); SomeFile.OpenAsText(1); Game.Msg(SomeFile.ReadText(4)); SomeFile.Close();
Отправлено: 27.10.08 23:16. Заголовок: И отрывок из лога, е..
Вот где ошибка var SomeFile;
Должно быть var SomeFile = new File("test.txt"); даже при условии, что файл существует. Этой командой ты не создаешь новый файл, а создаешь объект "файл" в игре, через который общаешься с физическим файлом. Теперь, если ты его откроешь для записи, он перезапишится, а чтобы изменять его содержимое нужен режим append
Отправлено: 28.10.08 07:59. Заголовок: А зачем тогда нужно ..
А что тогда делает 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.
SomeFile.SetFilename("test.txt") можно использовать когда ты создаешь объект без указания конкретного файла var SomeFile = new File() Потом ты можешь привязать к этому объекту другой файл.
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. Если я сам ее создаю, то все работает нормально.
Отправлено: 08.02.09 17:12. Заголовок: Вопрос: var SomeFil..
Вопрос: 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") то ошибки нет, но тогда файл валяеться рядом с екзешником, что есть не очень красиво)
Проверь, возвращает ли SomeFile.OpenAsText(2); значение true Скрипт проверил - у меня работает. SomeFile.WriteLine(ProfileList) нужно заменить на SomeFile.WriteLine(ProfileList[і]). Опечатка наверное
Отправлено: 09.02.09 18:59. Заголовок: Да, опечатки не было..
Да, опечатки не было, форум захавал скобки, и пол текста стало курсивом
SomeFile.OpenAsText(2) Возвращает False, в то время как SomeFile.OpenAsText(1) успешно возвращает true, accessmode переменной SomeFile при попытке открыть в режиме writing соответственно не меняеться :( Пробовал открывать в режиме appending, и не закрывать файл, не помогает :( Пока помогает только переписать путь как (Directory.CurrentDirectory + "\ProfilesNames.txt").
Отправлено: 09.02.09 20:56. Заголовок: Странно. У меня все ..
Странно. У меня все фурычит. У теба какая версия движка? У меня последняя бета V.1.8.009 Ты с файлом еще какие-то действия прежде выполняешь? И еще на всякий случай, покажи лог целиком
Отправлено: 10.02.09 19:08. Заголовок: Версия движка: V.1...
Версия движка: 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 ********************************************
Отправлено: 11.02.09 21:50. Заголовок: Вот wme проект: http..
Вот 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. Т.е. файл открывается для чтения, читается в массив, а потом перезаписывается в обратном порядке. У меня все работает (смотри лог). Проверь, что получается у тебя.
Отправлено: 12.02.09 18:57. Заголовок: Всё, сработало!:) И ..
Всё, сработало!:) И я сразу понял в чёс проблема у меня была: У меня папка Техт лежала в папке Data, хоть при этом и функция Copy Filename и даёт тот же самый путь, если файлы лежат в папке проекта:) Перенёс папку, и всё заработало!) Огромное Спасибо!!! :)))) Правда теперь если скомпилить проект, то тогда игра отказываеться работать с файлами вообще, так что всё равно придёться делать их "внешними" -_-
Все даты в формате GMT
3 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет