Пытаюсь разобраться с функцией copyfile язык с++. Пока пример банальный, программа компилируется, но файл 2 не создается. Code: #include "stdafx.h" #include "windows.h" #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { CopyFile(L"C:\\1.txt",L"C:\\2.txt",true); cout<<"all done\n"; return 0; }
Лично у меня код компилируется и работает отлично. Code: #include "stdafx.h" #include "windows.h" #include "iostream" using namespace std; int _tmain(int argc, _TCHAR* argv[]) { int r = CopyFile(L"C:\\1.txt", L"C:\\2.txt", true); cout << (r ? "success" : "fail"); return 0; } Смотри что выведет. Если fail - значит файл уже существует. Возможно, он скрытый, и ты его не видишь?
Спасибо на этом этапе разобрался. Еще такой вопрос: Я тяну файл по следующему адресу C:\\Users\\Имя_юзера\\AppData\\Roaming Так как для разных пользователей Имя_юзера будет разным, каким образом должен выглядеть адресс в коде программы?
Code: #include "stdafx.h" #include "windows.h" #include "iostream" #define UNLEN 256 using namespace std; int _tmain(int argc, _TCHAR* argv[]) { char buffer[UNLEN+1]; DWORD size; // размер size = sizeof(buffer); // размер буфера GetUserNameW(buffer,&size); cout << buffer; int r = CopyFile(L"C:\\Users\\%buffer%\\AppData\\Roaming\\1.txt", L"D:\\Sneaked.txt", true); cout << (r ? "success" : "fail"); return 0; } Поискал примеры. Не разберусь с кодировками, cout << buffer; выводит не имя пользователя. Скорее я где-то допускаю ошибку, подскажите где? %buffer% да, и это я поставил наугад, правильно? Спасибо.
getenv еще можно заюзать. Code: void WinMain() { char *APPDATA; APPDATA = getenv("APPDATA"); MessageBox(0,APPDATA,";)",MB_OK); ExitProcess(0); }
C: - никогда так не делайте. Потому что винда может стаять и на других диска. Лично у меня это Диск E: Как сказал BrainDeaD лучше получать через спец функции. Также есть и более альтернативный метод (на чистом апи): GetEnvironmentVariableA("APPDATA", buf, bufsize); Но он чуть не надежен. потому что можно программно подменить это через переменные окружения
Спасибо, за советы. Я , честно говоря, не имею пока представления как с ними работать. Пусть пока останется диск С, на дальнейших этапах можно будет заняться и этим. Но сейчас нужно определить имя пользователя и прописать в адрес. Каким лучше способом это сделать?
Прописал следующее: Code: char buff[100]; DWORD dw=100; GetUserName(buff, &dw); получаю ошибку: error C2664: 'GetUserNameW' : cannot convert parameter 1 from 'char [100]' to 'LPWSTR' 1> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
2 Nickotin да за тебя проще программу написать... 1. Прочитай про ANSI и UNICODE, узнай что означает A/W в конце функций 2. Как говорил slesh для формирования адреса файла проще заюзать ExpandEnvironmentStrings(_TEXT("%appdata%\\file.txt"),buf,sizeof(buf)); 3. RTFMSDN (c) мну
GetUserName((LPWSTR)buff, &dw); А лучше Project->project_name properties->Configuration properties->General->Character Set поставить Not Set