Bonjour,
regarde les structures : DIR, dirent et stat.
puis les fonctions et macro : opendir, readdir, stat, S_ISDIR et closedir.
Voici un exemple d'utilisation, mais attention c'est codé avec wxWidgets,
c'est donc juste un exemple du principe d'utilisation des structures, macro et fonctions citées ci-dessus.
/*---------------------------------------------------------------------------*/
void wxMyFTPFrame::UpdateDisplay()
{
int image_id;
long lCount;
size_t count;
wxArrayString files;
wxString current, tmp;
DIR *dp;
dirent *ep;
struct stat buf;
current = wxGetCwd();
m_LocalFiles->DeleteAllItems();
dp = opendir(current.c_str());
if (dp != NULL)
{
count = 0;
while ((ep = readdir(dp)) != NULL)
{
tmp = ep->d_name;
files.Add(tmp);
count++; // le Data ne seras pas égal à zéro
if (tmp != _T("."))
{
if (stat(tmp.c_str(), &buf))
{
buf.st_mode = 0;
buf.st_size = 0;
buf.st_atime = 0;
buf.st_mtime = 0;
buf.st_ctime = 0;
}
lCount = m_LocalFiles->GetItemCount();
lCount = m_LocalFiles->InsertItem(lCount, tmp);
if (S_ISDIR(buf.st_mode))
{
m_LocalFiles->SetItem(lCount, 1, _T("<DIR>"));
m_LocalFiles->SetItemImage(lCount, wxFileIconsTable::folder);
m_LocalFiles->SetItemData(lCount, -count);
}
else
{
#ifdef __WXMSW__
m_LocalFiles->SetItem(lCount, 1, wxString::Format(_T("%lu"),
buf.st_size));
#else
m_LocalFiles->SetItem(lCount, 1, wxString::Format(_T("%llu"),
buf.st_size));
#endif
image_id = wxFileIconsTable::file;
if (tmp.Find(_T('.')) != wxNOT_FOUND)
image_id = wxTheFileIconsTable->GetIconID(tmp.AfterLast(_T('.')));
m_LocalFiles->SetItemImage(lCount, image_id);
m_LocalFiles->SetItemData(lCount, count);
}
wxDateTime dateTime(buf.st_mtime);
//
The ISO 8601 format is HH:MM:SS. I don't want the second
m_LocalFiles->SetItem(lCount, 2, dateTime.FormatISODate() + _T(" ")
+ dateTime.FormatISOTime().Left(5));
}
}
closedir (dp);
m_LocalFiles->SortItems(CompareList, (long)&files);
}
}
/*---------------------------------------------------------------------------*/
Cordialement
Fred Cailleau-Lepetit (
[ Lien ])