Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
chupchupps

Проблема с кодировкой

19.12.2011, 21:46. Показов 1364. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем задача: работа с файлами. Решил сделать все в DOS окошке и не заморачиваться с созданием окон и прочим прочим прочим.

Суть в чем, одна из задач - вывод на экран имен не закрытых файлов и их описателей.
Вот фрагменты кода:
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
52
53
54
55
56
57
58
59
struct Names
{
    vector <char*> FileNames;  //вектор для имен файлов
    vector <HANDLE> FileHandles; //вектор для их описателей
};
struct Names a;
/*************************/
 
void open() // функция открытия файла
{
    HANDLE hFile;
    char *DirName = new char [1024];
    char *FileName =  new char [256];
    cout<<"Enter path: "<<endl;
    cin.ignore();
    cin.getline(DirName,1024);
    if(!SetCurrentDirectoryA(DirName))
    {
        cout<<"There is no such directory \n";
        delete []DirName;
        return;
    }   
    cout<<"File name: ";
    cin>>FileName;
    hFile = CreateFileA(FileName, GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_ALWAYS, 0, 0);
    if (hFile == INVALID_HANDLE_VALUE)
    {
        cout<<"Error: "<<GetLastError();
        system("pause");        
        delete []DirName;
        return;
    }
    else
    {
        strcat(DirName,FileName);
        a.FileNames.push_back(DirName); //таки загоняем имя файла в вектор
        a.FileHandles.push_back(hFile);   //и описатель туда же
       cout<<"Got it!\n";
    }
    delete []FileName;
    delete []DirName;
};
 
/*****************************/
 
void show()  //функция вывода векторов на экран
{
    vector<char *>::iterator Name = a.FileNames.begin();
    vector<HANDLE>::iterator Handle = a.FileHandles.begin();
    while(Name!=a.FileNames.end())
    {
        cout<<*Name;
        cout.width(10);
        cout<<*Handle<<"\n";
        ++Name;
        ++Handle;
    }
    system("pause");
};
Что получаем в итоге:


ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ
ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ
ЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭЭ♂в?GIё 00000014


Записи такого типа (на самом деле букв Э больше), через пробел я так понимаю сам описатель, а первая часть имя файла.
Что я делаю не так? :С
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2011, 21:46
Ответы с готовыми решениями:

Проблема с кодировкой
Есть несколько проблем. Первая, при считывания с файла происходит какая-то лажа с кодировкой, выводит случайные символы. При сохранении...

Как считать текст из Edit control? Проблема с кодировкой
подскажите пожалуйста как считать текст из edit control, для дальнейшего вывода, а то у меня все время то тип не подходит(char не совместим...

С кодировкой базы данных и кодировкой сайтом и кодировкой файла разобраться не могу
С кодировкой базы данных и сайтом файлом разобраться не могу. Я на своем сайте вывожу данные из другой mysql.... МММ сайт на win 1251 а...

3
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
23.12.2011, 15:42
chupchupps, Ты часом не задание по файловой защите делаешь - аля список путей к файлам в журнале, запустить программ и чтобы те файлы нельзя было удалить???Я реализовывал такой проект, вот даже ссылочка на форуме на проект
https://www.cyberforum.ru/visu... ost2210629
https://www.cyberforum.ru/visu... ost2213491
Пиши в личку если интересно как такое делать...

Добавлено через 4 минуты
Цитата Сообщение от chupchupps Посмотреть сообщение
Суть в чем, одна из задач - вывод на экран имен не закрытых файлов и их описателей.
- вчитался в задание, попробую накидать...
0
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
23.12.2011, 18:14
Цитата Сообщение от chupchupps Посмотреть сообщение
vector <char*> FileNames; //вектор для имен файлов
и так вектор будет хранить ptr-указатели

Цитата Сообщение от chupchupps Посмотреть сообщение
char *DirName = new char [1024];
в функции open() выделяешь память из кучи

Цитата Сообщение от chupchupps Посмотреть сообщение
a.FileNames.push_back(DirName); //таки загоняем имя файла в вектор
далее передаёшь в вектор указатель на кучу

Цитата Сообщение от chupchupps Посмотреть сообщение
delete []DirName;
но почему ты удаляешь её, а в векторе указатели на что будут указывать ?

Удалять кучу нужно после использования вектора пробегаясь по всему вектору освобождая занятую память.
C++
1
2
3
4
5
for(size_t i = 0u; i < a.FileNames.size(); i++) {
   delete[] a.FileNames[i];
  a.FileNames[i] = NULL;
}
a.FileNames.clear();
Почему бы статические буфера не использовать.
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
23.12.2011, 23:16
chupchupps, вот проект, он работает только вот проблемма в том что даже открытый в блокноте файл CreateFile открывает!Попробуй какой то файл писать через другое приложение, может тогд к нему доступ не получим
Суть была в следующем в каталоге были файлы с данными названиями "1.txt","2.txt","open.txt","data.txt " - как бы понятно что open.txt был открыт NotePad.exe
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <windows.h>
#include <stdio.h>
 
//Текстовое извещение о системной ошибке
LPSTR StrWinError(int _err)
{
    LPSTR errString = NULL;  // will be allocated and filled by FormatMessage
    FormatMessage(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |
        FORMAT_MESSAGE_FROM_SYSTEM, // use windows internal message table
        0,       // 0 since source is internal message table
        _err,    // this is the error code 
                 // Could just as well have been an error code from generic
                 // Windows errors from GetLastError()
        0,       // auto-determine language to use
        (LPSTR)&errString,
        0,       // min size for buffer
        0 ); 
    return errString;
}
 
HANDLE GetFileDescryptor(LPTSTR sPath, DWORD dwShareMode)
{
    HANDLE hFile = CreateFile
                    (
                        sPath, 
                        GENERIC_READ |
                        GENERIC_WRITE,
                        dwShareMode,    /* Открытие с dwShareMode доступом*/
                        NULL,
                        OPEN_EXISTING,  /*Если путь будет отсутвовать то выбросим ошибку*/ 
                        FILE_ATTRIBUTE_NORMAL,
                        NULL
                    );
    return hFile;
}
 
int main()
{
    system("chcp 1251");
    FILE *f;
    long iName;
    char * fName[] = {"1.txt","2.txt","open.txt","data.txt",NULL};
    char sDir[256]  = {0};
    char sPath[256] = {0};
    HANDLE hFile    = INVALID_HANDLE_VALUE;
    if(!GetCurrentDirectory(256,sDir))
        printf("%s\n",StrWinError(GetLastError()));
    else
    {
        if(!(f = fopen("results.txt","w")))
            printf("ERROR creation results.txt %s\n",StrWinError(GetLastError()));
        else
        {
            iName = 0;
            printf("FILE PATH\tFILE HANDLE\n");
            fprintf(f,"FILE PATH\tFILE HANDLE\n");
            while(fName[iName] != NULL)
            {
                sprintf(sPath,"%s\\%s",sDir,fName[iName]);
                printf("%s\t",sPath);
                fprintf(f,"%s\t",sPath);
                hFile = GetFileDescryptor(sPath, 0);
                if(hFile == INVALID_HANDLE_VALUE)
                {
                    printf("ERROR%s\n",StrWinError(GetLastError()));
                    fprintf(f,"ERROR%s\n",StrWinError(GetLastError()));
                }
                else
                {
                    printf("0x%p\n",hFile);
                    fprintf(f,"0x%p\n",hFile);
                }
                CloseHandle(hFile);
                iName++;
            }
            fclose(f);
        }
    }
    system("pause");
    return 0;
}
Миниатюры
Проблема с кодировкой  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2011, 23:16
Помогаю со студенческими работами здесь

Проблема с кодировкой
if (ui-&gt;btnStart-&gt;text()==&quot;Старт&quot;){ start(); ui-&gt;btnStart-&gt;setText(&quot;Стоп&quot;); } else { stop(); ...

Проблема с кодировкой?
Может кто сталкивался с подобной проблемой? есть клиент Internet Explorer, есть сервер1, на нем стоит linux+ Apache 1.3.20...

Проблема с кодировкой
Здравствуйте! В сокет приходят русские символы закодированные в utf8. Проект Windows Forms. Если вывести в textBox или label то выходит что...

Проблема с кодировкой
Здравствуйте, у меня проблема с кодировкой. Если текст вводить на кириллице на страницах html или php, то все нормально выводит. Если...

проблема с кодировкой
не могу разобраться с кодировкой делаю if ($matches3 == 'Склад') { $shop_warehouse_id = 3; } в if не...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru