Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2015, 01:39   #1
polin11
Форумчанин
 
Регистрация: 07.06.2015
Сообщений: 164
По умолчанию Приведение массива char[] (или char* ) в LPCTSTR

Задача: пользователь вводит директорию, нужно проверить существует ли эта директория.
Функция DirExists проверки работает правильно, но арuумент у этой функции имеет тип LPCTSTR, клиент вводит строку (char[] или char*)
преобразование в LPCTSTR происходит неверно. Просьба помочь преобразовать в LPCTSTR.

Код:
#include "stdafx.h"
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> 
#include <iostream>
#include<iostream>
#include<fstream>
#include <string>
using namespace std;
bool DirExists(LPCTSTR dir)
{
  DWORD code = GetFileAttributes(dir);
  return code != 0xFFFFFFFF && (FILE_ATTRIBUTE_DIRECTORY & code) != 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
	cout<<"vvedite put" <<endl;
	char str[80];
        cin>>str;               //клиент вводит директорию "C:\\";
	LPCTSTR t=L"C:\\";
	LPCTSTR s=(LPCTSTR) str;
	
	if(DirExists(t))
	  cout<<"OK" <<endl;  //выводит NO
	else
      cout<<"No" <<endl;
    if(DirExists(s))
	  cout<<"OK" <<endl;  //выводит OK
	else
      cout<<"No" <<endl;

	int n;
	cin>>n;
	return 0;
}
polin11 вне форума Ответить с цитированием
Старый 29.07.2015, 04:39   #2
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Можно сделать так:

Код:
#include <iostream>
#include <string>
#include <windows.h>

using namespace std;

bool DirExists(LPCTSTR dir)
{
  DWORD code = GetFileAttributes(dir);
  return code != INVALID_FILE_ATTRIBUTES && (FILE_ATTRIBUTE_DIRECTORY & code) != 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "rus");

    cout<<"Введите путь: ";

    string str;
    cin >> str;

    wstring str2;
    str2.resize(str.size());

    OemToCharW(str.c_str(), &str2[0]);

    if(DirExists(str2.c_str()))
        cout<<"Yes" <<endl;
    else
        cout<<"No" <<endl;

    return 0;
}
В данном случае сделал преобразование через OemToCharW, но это преобразовывает строку char*, в которой текст записан как oem 866 в wchar_t*.

Для обычного преобразования можно использовать функцию mbstowcs. Использовал OemToCharW, чтоб можно было вводить путь на русском.
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Старый 29.07.2015, 09:14   #3
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

Поменяйте тип проекта с UNICODE на MultiByte, либо поменяйте аргумент DirExist на LPCSTR и вызывайте GetFileAttributesA. В обоих случаях ничего преобразовывать не надо будет.
waleri вне форума Ответить с цитированием
Старый 29.07.2015, 17:01   #4
Krasiosoft
Форумчанин
 
Аватар для Krasiosoft
 
Регистрация: 01.06.2015
Сообщений: 497
По умолчанию

Если задача не стоит проверять существует ли директория через WinAPI, то еще можно использовать функцию access или stat:

Код:
#include <iostream>
#include <string>

#include <io.h>        // for access
#include <sys/stat.h>  // for stat

using namespace std;

int main() {

  cout<<"Input path: ";
  string path;
  cin >> path;

  // access
  if( !access(path.c_str(),F_OK) ) cout << "access: YES." << endl; // F_OK - Check for file existence
  else cout << "access: NO." << endl;

  // stat
  struct stat status;
  if( !stat(path.c_str(),&status)) cout << "stat: YES." << endl;
  else cout << "stat: NO." << endl;

  cin.get();

  return 0;
}
Если помог, буду очень благодарен за Ваш отзыв (весы в левой нижней части сообщения).
Krasiosoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
char * conver (char *somestr) вылетает с exception mosq Общие вопросы C/C++ 2 23.02.2013 02:23
как исправить ошибку invalid conversion from const char* to char Ника К Помощь студентам 5 01.06.2012 00:13
Проблема с программой. Нельзя преобразовать тип set of char к char Lasso Помощь студентам 5 07.06.2011 12:03
Cтроки. Приведение типов. char * to float Aerial Общие вопросы C/C++ 3 28.04.2010 14:54
Есть таблица - В ней три поля int, char, char нужно чтобы данные заносились в таблицу Mysql Muahahaha PHP 8 27.03.2008 11:17