• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dodawanie nazwy użytkownika (char) do ścieżki pliku

Object Storage Arubacloud
0 głosów
620 wizyt
pytanie zadane 15 grudnia 2016 w C i C++ przez smokolisz Mądrala (6,340 p.)
edycja 15 grudnia 2016 przez smokolisz

Cześć, pisze program który kopiuje plik, ale chciałbym, żeby działał na każdym komputerze, a przecież każdy ma inną nazwe użytkownika więc lipa. Znalazłem taką funkcje:

char name[ 100 ];
DWORD dwname = sizeof( name );
GetUserName( name, & dwname );


I tu pojawia się problem, bo mam nazwe użytkownika, natomiast jak wstawić ją do ścieżki pliku np C:\Users\UŻYTKOWNIK\Desktop?

Próbowałem tak:

CopyFileA("C:\\Users\\"<<name<<"\\Desktop\\excel.txt", "C:\\Users\\"<<name<<"\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\excel.txt", true );


Mam error:"Invalid operands of types 'const char[10] and char [10] to binary operation '<<operation' "

W jaki sposób mam dołączyć nazwę użytkownika do ścieżki pliku?

2 odpowiedzi

+2 głosów
odpowiedź 15 grudnia 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)
wybrane 15 grudnia 2016 przez smokolisz
 
Najlepsza

Spróbuj takiego wywołania:

CopyFileA( (string("C:\\Users\\") + name + "\\Desktop\\excel.txt").c_str(), (string("C:\\Users\\") + name + "\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\excel.txt").c_str(), true );

Klasa string, z której korzystam pozwala połączyć (konkatenować) tablice znaków. Jakbyś chciał głębszego wyjaśnienia jak to działa, to pytaj.

komentarz 15 grudnia 2016 przez smokolisz Mądrala (6,340 p.)
Dzięki wielkie! Naprawde pytałem na tylu forach i nikt nie potrafił udzielić mi jasnej odpowiedzi :) Traciłem już nadzieje. Rządzisz!

Jak masz chwile to możesz napisać "głębsze wyjaśnienie", bo moim motto jest "daj człowiekowi rybe, a nakarmisz go na jeden dzień, naucz człowieka łowić ryby, a nakarmisz go na całe życie". Pięknie dziękuje :)
komentarz 15 grudnia 2016 przez Sebastian Fojcik Nałogowiec (43,020 p.)

Funkcja CopyFileA przyjmuje 3 argumenty:
- tablica char
- tablica char
- wartość logiczna bool

Całe sedno, to jak połączyć "napis" z nazwą użytkownika, która jest inną tablicą char. Można to zrobić ręcznie poprzez pętlę, tworzenie nowych tablic i inne skomplikowane konstrukcje. Ale przecież istnieje klasa string, która służy do operowania na tekstach (łączy, dzieli, przeszukuje, tworzy, usuwa, wycina, itd.)

Pokażę teraz przykłady łączenia napisów przy użyciu string.

1) "Ala" + "Tomek" = BŁĄD
2) string("Ala" + "Tomek") = BŁĄD
3) string("Ala") + string("Tomek") = "AlaTomek" (string)
4) string("Ala") + "Tomek" = "AlaTomek" (string)
5) "Ala" + string("Tomek") = BŁĄD
6) string("Ala").c_str() = "Ala" (char*)
7) string("Ala").c_str() + string("Tomek").c_str() = "Ala" + "Tomek" = BŁĄD
8) (string("Ala") + "Tomek").c_str() = "AlaTomek" (char*)

Komentarz:

W moich przykładach rozróżniamy 2 typy napisów. Stałe napisy (tablice char) oraz zmienne string.

1) Dodanie dwóch stałych napisów jest niedopuszczalne.
2) Chcemy stworzyć string, ale w nawiasie dodajemy 2 stałe napisy (błąd!).
3) Tworzymy 1 string i wpisujemy do niego "Ala" i drugi z "Tomek". 2 zmienne string można bezproblemowo dodać do siebie.
4) Tworzymy string i wpisujemy do niego "Ala" i dodajemy do niego stały tekst. Do zmiennej string można dodać stały napis.
5) Do stałego napisu dodajemy string. Nie wolno tego robić.
6) Tworzymy string, wpisujemy do niego "Ala" i za pomocą funkcji c_str() zamieniamy string na stały napis. (jest to użyteczne, gdy funkcja przyjmuje właśnie stały napis jako argumenty).
7) Tworzymy 2 zmienne string i zamieniamy je osobno na stałe napisy. Jest to tak jakbyśmy chcieli dodać 2 stałe napisy "Ala" + "Tomek". Jest to niedopuszczalne.
8) W tym przypadku najpierw dodajemy 2 zmienne string do siebie (wykonujemy to co jest w nawiasie), a dopiero wynik tego połączenia zamieniamy na stały napis.

Jeśli nie wiesz do końca czym jest napis stały oraz czym się różni stała tablica char od zmiennej string, to nie zrozumiesz powyższych przykładów. Daj sobie trochę czasu i nie zniechęcaj się :-)

komentarz 15 grudnia 2016 przez smokolisz Mądrala (6,340 p.)
Dzięki wielkie! Jestem na 13 odcinku c++ oraz na 2 odcinku c++ obiektowego Mirosława Zalenta więc podstawy podstaw znam, ale wciąż długa droga przede mną. Fajnie, że społeczność programistów lubi sobie pomagać, co na początku mnie trochę dziwiło, bo w końcu robią sobie przyszłą konkurencje :D
komentarz 16 grudnia 2016 przez smokolisz Mądrala (6,340 p.)

Sorki za odkopanie, ale mam jeszcze jeden problem, ponieważ teraz potrzebuje wkleić 1 literę string a na początku ścieżki i o ile potrafię wkleić coś w środek to na początek tak niezbyt

Spróbowałem tak:

CopyFileA( (string(a[0]) + ":\\x\\ftp.txt").c_str(), (string("C:\\Users\\") + name + "\\Videos\\ftp.txt").c_str(), true );

 

komentarz 17 grudnia 2016 przez smokolisz Mądrala (6,340 p.)

Już mi się udało

CopyFileA( (string () + a[0] + ":\\x\\").c_str(), (string("C:\\Users\\") + name + "\\Videos\\t").c_str(), true );

 

0 głosów
odpowiedź 15 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
komentarz 15 grudnia 2016 przez smokolisz Mądrala (6,340 p.)
"C:\\Users\\"<<for(int i=0; i<100; i++){char[i];}<<"\\Desktop\\excel.txt"

W ten sposób?

komentarz 15 grudnia 2016 przez operator Stary wyjadacz (10,920 p.)
Lepiej jednak będzie jeśli użyjesz std::String::append
komentarz 15 grudnia 2016 przez smokolisz Mądrala (6,340 p.)

Zrobiłem tak:

string a;
a.append(name);

I nie działa

Podobne pytania

0 głosów
1 odpowiedź 327 wizyt
pytanie zadane 31 października 2016 w C i C++ przez Acravis Początkujący (330 p.)
0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 27 stycznia 2017 w PHP przez Neko Użytkownik (780 p.)
0 głosów
1 odpowiedź 269 wizyt
pytanie zadane 27 czerwca 2022 w C i C++ przez sushi2021 Nowicjusz (160 p.)

92,551 zapytań

141,397 odpowiedzi

319,528 komentarzy

61,936 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...