Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > chdir.exe


Автор: Знак 3.6.2005, 12:12
Сталкнулся с проблемкой
С++ никак нехочет менять диск под досом ну нивкакую!!
Под оболочкой С++ по умолчанию всё верно .. меняет дисковод и С и D ...
А в DOS только на A и B ... Хоть ты тресни.
Что делать непойму..
Замысел был сл. В коммандную строку вписываешь ...
chdir.exe C:
или
myprog.exe f:

Ну и переходишь на диск..
А тут еще и int в char непереводятся..

МОжет кто облегчит мои страдания и кинет текст проги..?

Вот моя прога недоделана переделана... smile

smile
Код

#include <stdio.h>
#include <direct.h>
#include <conio.h>
#include <stdlib.h>

int main(int re)
{
      int i,n, result;

//    clrscr();
//   re[1]='\h';
//   re=3;
//   n = atoi(re);

    result=re+64;
    printf("%d \n",re);
    if (!re)
    {printf("Инструкция \n");}
    else{

  if ( _chdrive(re) == 0)
    printf("Успешно изменён текущий Диск на %c \n", result);
  else
    printf("Невозможно изменить текущий Диск на %c \n", result);
  return 0;
  }
}

Автор: Дрон 3.6.2005, 12:17
Во первых, не стоит называть прогу chdir.exe, т.к. есть встроенная команда chdir.
Во вторых, main не принимает аргумент типа int, посмотри документацию.

Автор: bel_nikita 3.6.2005, 12:19
вместо int main(int re) надо main( int argc, char *argv[ ], char *envp[ ] )

Автор: Дрон 3.6.2005, 12:23
bel_nikita
Точно smile
Только последний параметр не обязателен и тут не нужен.

Знак
При этом в argc будет число, указывающее на количество переданных параметров+1 (т.к. всегда есть хотя один параметр -- само имя программы).
В argv будет массив строк, содержащий эти параметры.

Автор: jorkug 4.6.2005, 03:33
Знак
_chdrive меняет лишь свою текущую рабочую директорию
Цитата(MSDN)

Remarks
The _chdrive function changes the current working drive to the drive specified by drive. This function changes only the working drive;

Автор: Знак 4.6.2005, 08:47
Цитата(jorkug @ 4.6.2005, 03:33)
Знак
_chdrive меняет лишь свою текущую рабочую директорию
Цитата(MSDN)

Remarks
The _chdrive function changes the current working drive to the drive specified by drive. This function changes only the working drive;

Нет не только он и диск менял тоже, а вот после компиляции
только А и В переходил... smile


Непонятно че делать

Автор: Знак 6.6.2005, 17:35
За всей кривостью С++

просьба киндануть ссылку на работающий код по смене Дерева
и диска.. smile

Автор: ManiaK 7.6.2005, 11:17
Цитата
За всей кривостью С++

Си++ - самый "логичный" для машин язык после асма и Си. Все его уродства - это уродства машин в первую очередь.

Скорее всего раньше у тебя запускалась прога не твоя, а та, что в винде изначально заложена.
В Win, насколько понимаю, можно сделать нечто вроде:
Код

WinExec("C:");
WinExec("cd AnyFolder");

Думаю и в DOS есть что-то вроде этого, только времени искать нет smile

Автор: Crait 8.6.2005, 02:43
setdisk()

Автор: Знак 8.6.2005, 19:04
Все понимаю только для убедительности КОД кинуть надо

А про кривость языка и так понятно

я под ДОСОМ кодировал...
Во как

И там же кампилил
описалова мало примерчик киньте.....

Вроде все просто!?? smile

Я ведь и свой код положил и не жилил

проверьте ошибки чтоли!!

Автор: Crait 8.6.2005, 20:36
Это типа я код зажиливаю ?
Ну ладна, держи, от сердца отрываю :
Код


#include <stdio.h>
#include <dir.h>

int main(void)
{
   int save, disk, disks;

   /* save original drive */
   save = getdisk();

   /* print number of logic drives */
   disks = setdisk(save);
   printf("%d logical drives on the system\n\n", disks);

   /* print the drive letters available */
   printf("Available drives:\n");

   for (disk = 0; disk < 26; ++disk)
   {
      setdisk(disk);

      if (disk == getdisk())
         printf("%c: drive is available\n", disk + 'a');
   }

   setdisk(save);

   return 0;
}

Это из help'а, называецца setdisk example.

Автор: Знак 10.6.2005, 14:48

поправьте пргу как правильно передать переменную
из командной строки?
smile

Код


#include <stdio.h>
#include <dir.h>

int main( int argc, char *argv[ ] )
{

   int save, disks;

      /* save original drive */
         save = getdisk();

        /* print number of logic drives */
//     disks = setdisk(save);
//    printf("%d logical drives on the system\n\n", disks);

         /* print the drive letters available */
//          printf("Available drives:\n");

//     for (int disk = 0; disk < 26; disk++)
//    {
//      setdisk(disk);
//    if (disk == getdisk())
//    {
//    printf("%c: drive is available\n", disk + 'a');
//    }
//    setdisk(save);
//    }

//    if (!argc) {
//       setdisk(save);}
//       else {

//      и вот здесь не пашет не руля...
//      через Run\Arguments\Programm Arguments 
//    передавалось значение int от 0 до ..

         setdisk(argc);

         printf("вы перешли на диск %c \n", argc+'a');
//       }
//          return 0;
        }



Автор: oper54 10.6.2005, 15:10
Переход по драйверам
Код

 ...
 int drv((int)argv[1]-'a');
 
 setdisk(drv);
 printf("вы перешли на диск %c \n", argv[1]);
 ...

Автор: Crait 11.6.2005, 14:12
setdisk(tolower(*(argv[1]))- 'a');

Автор: Знак 11.6.2005, 14:18
Код


#include <dir.h>

int main( int argc, char *argv[ ] )
{

    int save, disks;

        /* save original drive */
        save = getdisk();
    if (argc!=2) {printf("No enter in stream")}

         setdisk(atoi(argv[1]));

         printf("вы перешли на диск %c \n", argc+'a');

        }



Вот переделал!
Используйте и благодарите за всё "ЗНАКА".

ТОлько для ввода надо использовать цифры а не буквы. smile

Автор: vadims 11.6.2005, 15:54
Понять не могу почему эта ветка такой непечатной длины.

Я уж не знаю, благодарить за решение проблемы 'З...' или разработчика среды. Если просто почитать Help, там четко написано, что drive имеет типом int - даже по элементарной C'шной логике:'a' - 0, 'b' - 1, 'c' - 2, 'd' ...
Хотя в моей 'жалкой среде' там и об этом конкретно написано.

Автор: Знак 14.6.2005, 10:52
Какой проблемы?

С+++ не разрабатывал..

Я только Скрипт для народа публиканул. smile

Автор: AISIN 24.6.2005, 11:41
пО моему с помощью этих функций можно выполнить любую дос команду!
system, _wsystem,_execl,_execv,_execlpe.

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