Cannot open include file: 'unistd.h' oraz pytanie o unicode

0

Witam.
Mam 2 problemy:
1.
Jak sprawdzić czy katalog istnieje w VS.
Znalazłem taki kod który ładnie śmiga w DEV-C++ ale w VS wywala mi błąd że

Cannot open include file: 'unistd.h': No such file or directory

 #include <stdio.h>
#include <unistd.h>
 
int main(int argc, char * argv[]) {
        if (argc!=2) printf("Nie podano argumentow wykonania!\nPrawidlowe wywolanie: %s plik/katalog\n", argv[0]);
        else {
                if (access(argv[1], F_OK) != 0)
                        printf("%s: nie istnieje!\n", argv[1]);
                else printf("%s: istnieje!\n", argv[1]);
        }
        return 0;
}
 

Znacie jakiś inny sposób aby sprawdzić czy katalog istnieje? bo nie chce mi się boć z Visual studio 2008.
2.
Czy jak w ustawieniach VS ustawię Character set na NOT SET i będę miał polskie znaki w zmiennych to będą błędy? bo jak ustawię

wyskakuje mi przy tym kodzie

char acUserName[100];
    DWORD nUserName = sizeof(acUserName);
    if (GetUserName(*acUserName, &nUserName))

error C2664: 'GetUserNameW' : cannot convert parameter 1 from 'char' to 'LPWSTR'

ale w DEV nie ma z tym problemu. Czy jak w ustawieniach VS ustawię Character set na NOT SET i będę miał polskie znaki w tej zmiennej to będą błędy i program się sypnie?
Bo po tym przestawieniu na te NOT SET gra

Z góry dzięki za pomoc

0
pablor napisał(a)

Jak sprawdzić czy katalog istnieje w VS.
Znalazłem taki kod który ładnie śmiga w DEV-C++ ale w VS wywala mi błąd że

Cannot open include file: 'unistd.h': No such file or directory

Zapewne nie masz pliku unistd.h, lub VS nie wie gdzie go szukać. Jeśli masz go w systemie, sprawdź ścieżki przeszukiwania plików nagłówkowych w ustawieniach VS/projektu.

pablor napisał(a)
if (argc!=2) printf("Nie podano argumentow wykonania!\nPrawidlowe wywolanie: %s plik/katalog\n", argv[0]);

Ten komunikat powinien lecieć na stderr, nie stdout.

pablor napisał(a)
        else {
                if (access(argv[1], F_OK) != 0)
                        printf("%s: nie istnieje!\n", argv[1]);
                else printf("%s: istnieje!\n", argv[1]);
        }
        return 0;

F_OK nie wiem czy Ci zadziała pod Windows. W Uniksach wszystko jest plikiem.
Aby ten program działał zgodnie ze sztuką, w przypadku gdy katalog/plik zostanie znaleziony, powinieneś wyjść z kodem 0. W przeciwnym wypadku z >0. W ten sposób skrypty będą mogły sprawdzić wynik bez parsowania wyjścia.

pablor napisał(a)

Znacie jakiś inny sposób aby sprawdzić czy katalog istnieje? bo nie chce mi się boć z Visual studio 2008.

Hmmm... dziwne. Google mi zwróciło sporo wyników. Może źle wpisujesz zapytanie?

0

A co z drugim?
będą działały polskie znaki?
Jeśli nie to jak zrobić aby były.
Co do pierwszego to to działa, a w google nic ciekawego nie znalazłem wszystko dotyczy plików.

0
  • GetFileAttributes + dokumentacja, "unistd.h" to nagłówek specyficzny raczej dla systemów uniksowych, MinGW ma go w spadku po GCC
  • ustaw kodowanie na multibyte, no set powoduje korzystanie z domyślnych ustawień, tj. unicode.
0
pablor napisał(a)

Co do pierwszego to to działa, a w google nic ciekawego nie znalazłem wszystko dotyczy plików.

Nie no, kolego... Pierwszy wynik zapytania: http://codeguru.earthweb.com/forum/showthread.php?t=178011

0

Dzięki.

ostatnia rzecz.
Jeśli chodzi o

 char acUserName[100];
    DWORD nUserName = sizeof(acUserName);
    if (GetUserName(*acUserName, &nUserName))

to ten kod uzyskuje nazwe użytkownika.
Jeśli nazwa będzie z polskimi znakami a ustawię kodowanie na multibyte to będzie działało?
czy trzeba zmienić ten char na coś innego?

Wielkie dzięki za pomoc

0

Będzie działało, ale na drugi raz spytaj się debuggera, nie nas, szybciej otrzymasz odpowiedź.

0

będą działały polskie znaki?
będą, jeśli plik źródłowy i wszystkie dane będą zapisane w DOS-owej stronie kodowej CP852 (IDE Visual Studio pozwala na ustawienie kodowania pliku).

Żeby działały dla normalnej windowsowej strony CP1250, zrób

setlocale(LC_ALL,"");

ale ma to skutki uboczne, np. floaty będą pokazywane z przecinkiem zamiast z kropką. Jeśli to niepożądane, pokombinuj z innymi wartościami zamiast LC_ALL.

Metoda z setlocale jest najwygodniejsza, bo działa i nic nie trzeba więcej kombinować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1