Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Как отследить запись в файл


Автор: victoria1 6.9.2012, 14:18
Имеется крупный и сложный код под win  (более 500 файлов в исходниках). Результат работы этой программы пишется в файл в домашнюю директорию запустившего пользователя, в папку application data. и этот путь записи где-то прописан в коде программы, не в каких-либо конфигфайлах. как найти, отследить место в коде где устанавливается папка записи? 
Поиском ключевых слов вроде application data и др. во всех файлах исходника это сделать не удалось.
Найти это нужно с целью изменить папку записи на папку из которой запускается программа.

Автор: math64 6.9.2012, 14:50
Там где пишется должно быть что-то подобное: [f]open - открытие файла; [f]write или fprintf или out << запись в файл; [f]close - закрытие файла.
Но имя файла может задаваться где-нибудь с совершенно другом месте, например в readConfig();

Автор: bsa 6.9.2012, 14:54
Цитата(victoria1 @  6.9.2012,  15:18 Найти цитируемый пост)
Найти это нужно с целью изменить папку записи на папку из которой запускается программа.
зачем?!? Такие программы (пишущие в каталог установки) имеют серьезные проблемы при работе в последних Windows. Система запрещает это делать без особых привилегий.

Я уверен, что путь не прошит жестко в коде программы. Он берется из реестра текущего пользователя.
На твоем бы месте, я начал бы не с поиска имени папки, а с поиска места записи в этот файл. Затем, зная как называется дескриптор файла, я бы по нему нашел место, где он создается. А там уже рядом должно быть и открытие файла (генерация имени файла).

Автор: victoria1 6.9.2012, 15:32
Цитата

Я уверен, что путь не прошит жестко в коде программы. Он берется из реестра текущего пользователя.

Программа консольная и работает без установки. И похоже что не использует реестр. На любой машине без установки работает. состоит из одного exe файла.

Автор: bsa 6.9.2012, 15:49
Цитата(victoria1 @  6.9.2012,  16:32 Найти цитируемый пост)
И похоже что не использует реестр
На каком основании сделан такой вывод?

Добавлено через 11 минут и 45 секунд
Кстати. Мы тебе не сможем больше ничего полезного подсказать. Найди место записи в файл (если файл текстовый, то ищи по фразам, что программа туда пишет), а затем место создания этого файла. больше ничем не можем быть тебе полезными.

Автор: victoria1 6.9.2012, 18:15
Нашлось! 
Там путь формируется на основе:
Код

getenv("USERPROFILE")

Но сразу возник вопрос, а в какой переменной окружения windows содержится путь исполняемого через консоль файла? т.е. аналог pwd unix. 
как этот путь указать?

Автор: bsa 6.9.2012, 19:56
изучай GetModuleFileName()

Автор: bems 7.9.2012, 13:25
lpCmdLine из WinMain начинается с имени файла

Автор: victoria1 8.9.2012, 14:43
Всем спасибо. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)