С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83

CopyFile не хочет работать с аргументами команды

15.03.2015, 15:54. Показов 2099. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть простая программка, которая просто должна копировать файлик, но когда я вручную прописываю имя файла - тогда работает, а когда вписываю аргументы main - то GetLastError() выбивает ошибку, что не может найти указанный файл.
Вот код программы:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <windows.h>
#include <clocale> //подключаем для использования setlocale
#include <string>
int main (int argc, LPTSTR argv[])
{
        setlocale(LC_ALL, "");
        if (argc !=3) {
        printf ("Использование: cpC файл1 файл2\n");
        system("pause");
        return 1;
    }
        if (!CopyFile(argv[1], argv[2], false)) {
        printf ("Ошибка при выполнении функции CopyFile: %x\n", GetLastError());
        system("pause");
        return 2;
    }
        printf ("Файл file.txt успешно скопирован!\n");
        system("pause");
        return 0;
}
Заранее спасибо.
Миниатюры
CopyFile не хочет работать с аргументами команды  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.03.2015, 15:54
Ответы с готовыми решениями:

Excel 2007 VBA. Функция с двумя аргументами не хочет работать
Компилятор ругается, на CulculationCumulativeNormalFunction (dbDelta1, dbNDFd1) говорит что функиция ожидает :=... или через раз просто...

Как заставить работать CopyFile?
Никак не могу заставить работать , помогите пожалуйста. { ...

Вызвать субпроцесс для команды с аргументами и переменной окружения
В линуксе испольхую такую команду: LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libv4l/v4l2convert.so fswebcam -r 640x480 -v ./test.jpg Как...

14
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
15.03.2015, 15:57
file.txt - это не полный путь. поэтому файл ищется кажется рядом с екзешником. если его там нет - то ошибка справедлива. чтобы узнать, как это путь - попробуйте распечать argv[0] - это полный путь до екзешника.
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 16:04  [ТС]
Даже если я делаю так(скриншот),например, все равно оно не работает.
Миниатюры
CopyFile не хочет работать с аргументами команды  
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 16:05  [ТС]
Результат роботы программы.
Миниатюры
CopyFile не хочет работать с аргументами команды  
0
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
15.03.2015, 16:07
два слеша - некорректный путь. это в коде их пишут для экранирования спец символов. а в том окошке, которое у вас на картинках надо один писать. т.е. D:\file.txt
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 16:12  [ТС]
Ничего не изменилось. Как я уже только не пробовала. Главное если не с использованием CopyFile, то работает. А нужно именно так.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
15.03.2015, 16:14
Поменяйте CopyFile на CopyFileA или CopyFileW (одно из двух).
0
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
15.03.2015, 16:20
если б дело было в них, оно бы не компилилось вроде. вот пример переписанный. работает. попробуйте у себя и потом уберите все закомментированное и лишнее. убедитесь в том, что файл D:/file.txt существует перед запуском.
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
#include <stdio.h>
#include <windows.h>
#include <clocale> //подключаем для использования setlocale
#include <string>
int main (int argc, char* argv[])
{
  setlocale(LC_ALL, "");
  //if (argc !=3)
  //{
  //  printf ("Использование: cpC файл1 файл2\n");
  //  system("pause");
  //  return 1;
  //}
 
  //const char* srcFile = argv[1];
  //const char* tgtFile = argv[2];
  const char* srcFile = "D:\\file.txt";
  const char* tgtFile = "D:\\filecopy.txt";
 
  printf("srcFile = %s\n", srcFile);
  printf("tgtFile = %s\n", tgtFile);
 
  if (!CopyFileA(srcFile, tgtFile, false))
  {
    printf ("Ошибка при выполнении функции CopyFile: %x\n", GetLastError());
    system("pause");
    return 2;
  }
 
  printf ("Файл file.txt успешно скопирован!\n");
  system("pause");
  return 0;
}
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 16:22  [ТС]
Ничего не помогает.

Добавлено через 1 минуту
Perfilov, так, если я пропишу название файла в CopyFile и у меня работает. Мне нужно именно чтобы с аргументов.
0
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
15.03.2015, 16:25
раскомментируйте 15-16 строки, закоменнтируйте 17-18
там распечатаются те аргументы, которые реально приходят в программу. что там печатается?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
15.03.2015, 16:26
Цитата Сообщение от Perfilov Посмотреть сообщение
если б дело было в них, оно бы не компилилось вроде.
Компилировалось бы в одном из вариантов (CopyFileA или CopyFileW).
Тут вот какая ошибка может быть: к примеру, проект настроен
на использование Unicode, значит, CopyFile расширяется в CopyFileW и
будет работать с wchar-строками. А аргументы в main всегда передаются
как char-строки. Отсюда и неразбериха.

Lenchik_19, замените CopyFile на CopyFileA, а в main
поставьте char вместо LPCTSTR:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <windows.h>
#include <clocale> //подключаем для использования setlocale
#include <string>
int main (int argc, char argv[])
{
        setlocale(LC_ALL, "");
        if (argc !=3) {
        printf ("Использование: cpC файл1 файл2\n");
        system("pause");
        return 1;
    }
        if (!CopyFileA(argv[1], argv[2], false)) {
        printf ("Ошибка при выполнении функции CopyFile: %x\n", GetLastError());
        system("pause");
        return 2;
    }
        printf ("Файл file.txt успешно скопирован!\n");
        system("pause");
        return 0;
}
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 16:28  [ТС]
Perfilov, так я тоже пыталась.
Миниатюры
CopyFile не хочет работать с аргументами команды  
0
265 / 165 / 56
Регистрация: 25.02.2015
Сообщений: 435
15.03.2015, 16:29
взяли бы да скопипастили пример. внимательнее смотрите на main:
int main (int argc, char* argv[])
0
0 / 0 / 0
Регистрация: 06.04.2013
Сообщений: 83
15.03.2015, 16:33  [ТС]
Всем большое спасибо! Всё заработало!
Только я не могу понять почем на 32-х разрядной системе этот пример работал безо всяких исправлений, а у меня 64-х и не работал, пока вы не помогли.
Спасибо ещё раз! Целый день с этим играюсь!
0
0 / 0 / 0
Регистрация: 14.04.2013
Сообщений: 78
01.11.2019, 19:12
Lenchik_19, Lenchik_19, У вас таки удалось запустить на 64-х битной системе? что сделали?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.11.2019, 19:12
Помогаю со студенческими работами здесь

Интернет не хочет работать,все хорошо подключается а браузер открывать не хочет первую страницу отображает
ребят такой вопрос,установил винду 8,все норм только интернет не хочет работать,все хорошо подключается а браузер открывать не хочет первую...

Не хочет работать AND
Приветствую) Есть код: $query_last5 = &quot;SELECT * FROM mail WHERE (to_id = 1 AND read = 0) ORDER BY id DESC LIMIT 5&quot;; /*161*/ $last5 =...

Не хочет работать
#include&lt;time.h&gt; #include&lt;stdlib.h&gt; using namespace std; int main() { setlocale(0, &quot;&quot;); int a; int n; int i, j,count =...

Не хочет работать QT
Недавно начал изучать С++ и поставил QT creator 4.3.1(Community). Сначало было все норм, писал програмку, запускал и все работало, теперь...

Не хочет работать ...
1. Установил ПХП. 2. Проверяю домен ruseller.loc Выскакивает При открытии файла выдает сам код Что делать ?... Windows...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru