Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 170, средняя оценка - 4.69
александр13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 20
#1

ofstream - C++

05.10.2009, 20:26. Просмотров 21412. Ответов 13

доброго времени суток! Возникла такая проблема:
У меня программа должна помещать данные о процессах и модулях в txt файл
std::ofstream ofs("zzz.txt");
ofs<<pr.szExeFile<<" ID:"<<pr.th32ProcessID<<std::endl;
но в файл вместо имени процесса выводится 1С02F4F4. ID выводится нормально.
То же самое и с именем модуля
ofs<<mo.szModule<<std::endl;
вместо имени выводится 1СO2F724
базовый адресс вообче пихать в txt не хочет mo.modBaseAddr, выдает ошибку.
быть может есть какие-то функции для записи в txt файл таких типов даных, или я что-то не так делаю?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.10.2009, 20:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос ofstream (C++):

ofstream - C++
Привет всем! Народ помогите пожалуйста нубу) Как сделать так чтобы создовался файл с именем которое я наберу с клавиатуры... пытался...

Ofstream - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main() { ofstream test(&quot;C:\Program Files...

ofstream - C++
Линковка, компиляция без ошибок. При выполнении программы срабатывает условие, почему так? Если лепить файл с программой в директории, то...

FILE* и ofstream - C++
Здравствуйте. Была поставлена предо мной задача: Сделать структуру, которая через меню будет выполнять некоторые действия с файлами....

ifstream ofstream - C++
как работают данные файловые операции, объясните пожалуйста куда происходит запись ена жёстком диске

Ofstream and ostream - C++
Как мне определить одну переменную для обоих потоков ? т .ею есть ффункция void Show(??? &amp;out) { out &lt;&lt; &quot; ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
05.10.2009, 20:42 #2
скорее всего выводишь адрес, а не значение
0
александр13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 20
05.10.2009, 20:50  [ТС] #3
нет это не адресс, потому что когда вывожу в окно output всё отлично
RETAILMSG(1,(pr.szExeFile));
а в файл не хочет
0
Том Ардер
Модератор
Эксперт по математике/физике
3742 / 2355 / 293
Регистрация: 15.06.2009
Сообщений: 4,219
06.10.2009, 02:18 #4
Да, в MFC есть такой эффект.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    
#include <fstream>
 
int main()
{
           CString cstr("test MFC");
        ofstream    of("dbg.txt");
 
        cout << (LPCTSTR)cstr << endl;
        cout << cstr  << endl;
        
        of << (LPCTSTR)cstr << endl;
        of << cstr  << endl;
        of.close();
 
return 0;
}
на консоли и в файле будет:
test MFC
00324204
0
александр13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 20
06.10.2009, 20:05  [ТС] #5
std::ofstream ofs("zzz.txt");
ofs<<(LPCTSTR)pr.szExeFile<<" ID:"<<pr.th32ProcessID<<std::endl;
тоже ничего не выходит. в файле набор цифр и букв а не имя процесса
0
александр13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 20
07.10.2009, 20:10  [ТС] #6
через fprintf тоже невыходит(
подскажить кто-нибудь(
0
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
08.10.2009, 06:19 #7
C++
1
2
    cout << pr.th32ProcessID[0] << endl;
    cout << sizeof *pr.th32ProcessID << endl;
посмотри в консоли, если там название процесса, должно вывести первый символ и еденицу
0
александр13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 20
08.10.2009, 20:11  [ТС] #8
HANDLE hS = NULL;
PROCESSENTRY32 pr = {sizeof(pr)};
hS = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pr.dwSize=sizeof(PROCESSENTRY32);
Process32First(hS,&pr);
for(int i=0;i<10;i++)
{
RETAILMSG(1,(pr.szExeFile));
Process32Next(hS,&pr);
}
В таком виде мне программа выдает список первых 10 процессов в окно output:
NK.EXE
filesys.exe
device.exe
shell32.exe
и тд...

засменяю строку
RETAILMSG(1,(pr.szExeFile));
на
char buffer[200];
printf( "%n %d", buffer,pr.th32ProcessID);
и вместо процессов выводится набор цифр, причем вместо каждого процесса однаковые

При выводе в файл
FILE *f;
f = fopen("zzz.txt","wb+");
fprintf(f,"%n %d",buffer,pr.szExeFile);
тоже набор цифр и букв

и при таком вырианте тоже:
std::ofstream ofs("zzz.txt");
ofs<<pr.szExeFile

pr.szExeFile имееет тип TCHAR, и скорее всего функции printf, fprintf, оператор << не предусмотренны для работы с этим типом. Функция RETAILMSG понимает этот тип и выводит в окно output его нормально. Скорее всего есть функция которая может вывести эту переменную в txt файл, вот какая я и хочу узнать
0
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
08.10.2009, 21:15 #9
александр13, вместо fstream попробуй fputs
пример
C++
1
2
FILE *f=fopen("text.txt", "a");
fputs("text", f);
1
александр13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 20
08.10.2009, 21:41  [ТС] #10
f = fopen("zzz.txt","wb+");
fputs(pr.szExeFile, f);

пишет :
error C2664: 'fputs' : cannot convert parameter 1 from 'TCHAR [260]' to 'const char *'
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
09.10.2009, 03:08 #11
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
#include <stdio.h> 
#include <Windows.h> 
#include <Winnt.h> 
//Здесь определена структура PROCESSENTRY32 и функция CreateToolhelp32Snapshot
#include <tlhelp32.h>
//int main ();
HANDLE functsia ()  {
 
 HANDLE hProcessSnap;
 PROCESSENTRY32 pe32;
 
 //Это мы находим дескриптор снимка процессов
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 
 FILE *f;
 f = fopen("rezultat.cc","wb");
 
 
 while (Process32Next(hProcessSnap, &pe32)) {
  printf ("pe32.szExeFile= %s\n", pe32.szExeFile);
  fprintf(f,"%s \n",pe32.szExeFile);
 } 
 
 
 fclose (f);
 CloseHandle(hProcessSnap);
 
 
}
 int main () {
  functsia ();
  getchar ();
  return 0;
 }
Автор, просьба, впредь оформляй поаккуратнее всё это дело, а то я чуть мимо не прошёл. Тема же очень интересная.
На тебе и в файл и на консоль сразу. Закомменть, чё не надо.
Ты походу дела с printf напортачил. Пишешь %d и надеешься, что она вернёт тебе строку.
...Поискал бы ссылки у себя, да они палёвые, хакерские... Меня выгонят к матери отсюда тогда...
1
accept
4822 / 3243 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
09.10.2009, 03:23 #12
Цитата Сообщение от александр13
При выводе в файл
FILE *f;
f = fopen("zzz.txt","wb+");
fprintf(f,"%n %d",buffer,pr.szExeFile);
тоже набор цифр и букв
неправильно юзаешь функцию fprintf

тип TCHAR я поискал и нашёл, что это либо char либо wchar_t, в зависимости от желания пользователя

поэтому то, что МедведЪ посоветовал, должно сработать
C
1
2
    f = fopen("zzz.txt","w");
    fputs((const char *) pr.szExeFile, f);
1
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,245
Завершенные тесты: 1
09.10.2009, 14:31 #13
александр13, весь код покажи
0
александр13
0 / 0 / 0
Регистрация: 30.08.2009
Сообщений: 20
09.10.2009, 20:07  [ТС] #14
Всем большое спасибо! Всё работает))
Вот весь код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
// PR.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <tlhelp32.h>
#include <Windows.h> 
#include <Winnt.h> 
#include <tlhelp32.h>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
 HANDLE hProcessSnap, pH = NULL;
 PROCESSENTRY32 pe32;
 
 hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
 if (hProcessSnap == INVALID_HANDLE_VALUE)
 return false;
 pe32.dwSize = sizeof(PROCESSENTRY32);
 Process32First(hProcessSnap,&pe32);
 
 FILE *f;
 f = fopen("rezultat.txt","wb");
 
 fprintf(f,"Process:\n");
 while (Process32Next(hProcessSnap, &pe32))
 {
 fprintf(f,"\n");
 fprintf(f,"%S",pe32.szExeFile);
 fprintf(f," ID: %u\n",pe32.th32ProcessID);
 fprintf(f,"   Modules:\n");
 pH = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE,pe32.th32ProcessID);
 MODULEENTRY32 mo = {sizeof(mo)};
 Module32First(pH,&mo);
 
 while (Module32Next(pH , &mo))
 {
 fprintf(f,"   %S\n",mo.szModule);
 fprintf(f,"     ID: %u\n",mo.th32ModuleID);
 fprintf(f,"     BaseAddr: %u\n",mo.modBaseAddr);
 fprintf(f,"     Size: %u\n",mo.modBaseSize);
 }
 } 
 
 
 fclose (f);
 CloseHandle(hProcessSnap);
 return 0;
    
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2009, 20:07
Привет! Вот еще темы с ответами:

Передача ofstream в функцию - C++
Здравствуйте. Подскажите, пожалуйста, как сделать из участка с 54 по 62 строку отдельную функцию (также с 64 по 73, с 75 по 85, с 87 по...

Перегрузка ifstream и ofstream? - C++
Есть класс //test.h cass test { private: int i; string st; public:

Наследование от ofstream и перегрузка << - C++
Добрый день, гуглил на английском языке, но ответа не попалось. Предыстория: некий объекта принимает в качестве параметра ссылку на...

ifstream/ofstream/fstream - C++
#include &lt;fstream&gt; fstream autosave; autosave.open(&quot;...autosave.txt&quot;); char x; autosave &lt;&lt; x; cout &gt;&gt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.10.2009, 20:07
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru