Jump to content

C - Ficheiros em pastas


Nat0ne
 Share

Recommended Posts

Como não tenho muita experiência em API's vou-te deixar uma solução um pouco rudimentar mas funcional.

Começar por ter uma string apenas com "dir" (é portável), depois pedes o path da pasta e depois concatenas (função strcat, por exemplo) à primeira string o que pediste agora. Depois disto, fazes uma simples chamada ao sistema dessa string.

char str[1024] = "dir ";
scanf("%s", &str[4]);
system(str);

Isto é um exemplo, atenção que não aconselho a usar a função scanf.

here since 2009

Link to comment
Share on other sites

Muito obrigado pela tua resposta. Mas, eu devia ter sido mais especifico.

Preciso de manipular os ficheiros desconhecidos dessa, portanto de algum modo queria obter o nome deles em strings ou se possivel directamente os apontadores.

Será que me sabes ajudar?

Agradecendo

Nat0ne

Link to comment
Share on other sites

Windows ou POSIX (Unix/Linux/MacOSX)?

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Tens que usar as funções FindFirstFile e FindNextFile. Exemplo:

HANDLE hFind;
WIN32_FIND_DATA FindFileData;

if((hFind = FindFirstFile("C:/some/folder/*", &FindFileData)) != INVALID_HANDLE_VALUE){
    do{
        printf("%s\n", FindFileData.cFileName);
    }while(FindNextFile(hFind, &FindFileData));
    FindClose(hFind);
}

Neste caso, a variável FindFileData ficará com os dados sobre o ficheiro, numa estrutura do tipo WIN32_FIND_DATA.

BTW, se quiseres suportar ficheiros com caracteres unicode, tens que saber como usar a WINAPI em modo unicode: http://www.cplusplus.com/forum/articles/16820/

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Olá de novo.

Estou a tentar usar esse código no Microsoft Visual C++ 2010, mas aparece o erro: "cannot convert parameter 1 from 'const char [31]' to 'LPCWSTR".

Coloquei (LPCWSTR) ao lado da string e não dá erro, mas a função FindFirstFile devolve sempre INVALID_HANDLE_VALUE. Como já experimentei este código há algum tempo não me lembro bem, mas aquele asterisco faz parte da string, certo? Não é algo que eu tenha de alterar consoante seja o meu caso...

Agradecendo a resposta

Nat0ne

Link to comment
Share on other sites

LPCWSTR é um apontador para chars Unicode. Tens que definir a string como sendo Unicode usando a macro _T().

Experimenta:

if((hFind = FindFirstFile(_T("C:/some/folder/*"), &FindFileData)) != INVALID_HANDLE_VALUE){

E tens que fazer include ao ficheiro Tchar.h para usar a macro _T().

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

São strings unicode 😉 Em vez de char, é suposto usares TCHAR, que usa ASCII ou Unicode conforme o que sistema onde estiveres a compilar suporte.

http://www.codeproject.com/KB/cpp/api_crt_cpp_lib_et_al.aspx#UnicodeAwareness

❝The idea that I can be presented with a problem, set out to logically solve it with the tools at hand, and wind up with a program that could not be legally used because someone else followed the same logical steps some years ago and filed for a patent on it is horrifying.❞- John Carmack on software patents

A list  of command line apps

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.