0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 7
|
||||||
1 | ||||||
Не загружается файл по сокращенному имени02.07.2013, 17:02. Показов 937. Ответов 10
Метки нет (Все метки)
Никогда не сталкивался с такой проблемой. Есть exe файл, в той же директории с экзешником находится папка folder, в папке есть файл file.txt, который надо открыть. Проблема вот в чем: если открываем файл по имени "folder//text.txt" то файл не открывается, а если открваем файл по полному имени, вместе с буквой диска, т.е. "E://Program Files//....//folder//text.txt", то все открывается как надо. Пробовал это делать стандартной функцией fopen и ф-ией CreateFile, вызовом:
0
|
02.07.2013, 17:02 | |
Ответы с готовыми решениями:
10
По сокращенному имени написать полное [Ada] Поиск человека с самым большим весом в БД по сокращенному имени Автоподстановка по сокращенному названию Загружается либо один файл, либо не загружается вообще ничего |
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
|
|
02.07.2013, 17:44 | 2 |
Воспользуйся перед этой строкой функцией GetCurrentDirectory, она покажет в какой директории происходят действия.
0
|
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
|
|
03.07.2013, 04:48 | 3 |
Я вот одного не понял... Это Unix-путь. Или, если угодно, путь к странице сайта.
В Windows-системах путь должен выглядеть так: "E:\\Program Files\\....\\folder\\text.txt".
0
|
Ушел с форума
|
|
03.07.2013, 11:27 | 4 |
Во-первых, текущая директория процесса может отличаться от той, в которой находится exe.
В этом случае он будет искать подпапку folder совсем не там, где ожидается. Во-вторых, нужно смотреть, что возвращает GetLastError. В-третьих, в CreateFile стоит флаг OPEN_ALWAYS, это значит, что файл будет создан, если не существует. А доступ на запись к Program Files есть только у системы и администраторов (в режиме elevated).
0
|
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 7
|
|
03.07.2013, 13:08 [ТС] | 5 |
в папке E:\BouncingBall\WorldEditor\Release
нужный файл в папке E:\BouncingBall\WorldEditor\Release\Ani Где-то читал, что в windows можно и так и так. Пробовал и так и так - результат тот же (в программе изначально всегда используются \\). GetLastError возвращает ошибку "Невозможно найти путь к файлу". Текущая директория та, где находится exe.
0
|
Хочу в Исландию
1041 / 840 / 119
Регистрация: 10.11.2010
Сообщений: 1,630
|
||||||
03.07.2013, 17:38 | 6 | |||||
А если сделать так, то это устроит?
0
|
0 / 0 / 0
Регистрация: 05.05.2013
Сообщений: 7
|
|
04.07.2013, 16:05 [ТС] | 7 |
В общем получилось все очень странно. Рассказываю полную историю: я работаю над игрой и редактором уровней к ней. Игра построена следующим образом: считаем что exe файл с игрой расположен в некоторой папке ...\\Game, тогда в этой же папке находятся другие папки с игровыми ресурсами: в "...\\Game\\Ani" графика, в "...\\Game\\Music" музыка, в "...\\Game\\Worlds" уровни и т.д. Соответственно если надо загрузить что-то, то пишем к примеру "Ani\\имя_файла". В самой игре все работает отлично. exe от редактора находится в той же папке что и игровой, следовательно к ресурсам можно получать доступ таким же образом и можно использовать уже готовый код из движка. Теперь переходим к редактору уровней: надо открывать файлы на редактирование, это делается с помощью стандартного диалогового окна открытия файла. Допустим открываем файл по адресу
"E:\BouncingBall\Release\Worlds\level.lvl", в результате ни один ресурс загрузить не получается, потому что система не находит файлы по заданному пути. Сделал вывод результата GetCurrentDirectory() прямо перед загрузкой ресурса, получаю такое: "E:\BouncingBall\Release\Worlds", т.е. директория, в которой находится не exe файл с редактором, а файл level.lvl, который мы открыли на редактирование. Ну решил ради эксперимента перебросить все ресурсы в папку "E:\BouncingBall\Release\Worlds" и вуаля - все прекрасно загрузилось. Сделал вывод GetCurrentDirectory() в самом начале работы редактора (до открытия файла), получаю: "E:\BouncingBall\Release", все как надо. Т.е. после открытия файла стандартным диалоговым окном текущая директория магическим образом поменялась на директорию, в которой находится открываемый файл. Как это так вообще?
0
|
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
|
|
07.07.2013, 11:17 | 8 |
ОС запоминает последний каталог, использовавшийся в стандартном диалоге открытия файлов и при повторном вызове снова использует его.
0
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
|
07.07.2013, 12:38 | 9 |
Всё дело в С++ компиляторе. Символ слеша "\" зарезервирован самим компилятором, поэтому этот символ будет "не понят" компилятором.
Добавлено через 2 минуты Да ну? Если открывать диалог одной программой - да, а если другая программа - она использует иной путь, по умолчанию - папка с программой. Или в ОС что-то поменяли, а меня не предупредили?)))
0
|
Исследователь
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
|
|
07.07.2013, 17:45 | 10 |
Я в курсе. У ТС был обратный слэш, если Вы обратите внимание. Я просто слегка подкорректировал путь с учетом "претензий" компилятора.
И опять я, блин, в курсе Но в данном конкретном случае речь идет об ОДНОЙ программе, автором которой является ТС. Эрго, Ваши "претензии" не принимаются как аргумент
0
|
45 / 48 / 5
Регистрация: 24.06.2013
Сообщений: 677
|
|
07.07.2013, 17:52 | 11 |
Это не претензии Просто я переживал, что что-то поменялось, а я живу по старым правилам) Но раз всё хорошо, то извините, если это показалось претензией)
Добавлено через 3 минуты В момент запуска программы проинициализируйте символьный массив с помощью функции GetCurrentDirectory, а потом перед запуском файла SetCurrentDirectory и должно быть счастье без купюр) Иного выхода нет, кроме поиска по всему жёсткому диску, что будет тупо)
0
|
07.07.2013, 17:52 | |
07.07.2013, 17:52 | |
Помогаю со студенческими работами здесь
11
Запросить ввод имени файла и если файл есть, создать другой файл не загружается файл Не загружается файл Не загружается файл Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |