请教C++小程序:文件夹的打开

lanbingyi1420 2013-01-27 01:25:27
一个存储图片的文件夹,如何利用C++打开文件夹,并随机输出图片文件?
...全文
184 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
ForestDB 2013-01-27
友情提醒C++本身不带目录操作库。
  • 打赏
  • 举报
回复
derekrose 2013-01-27
先打开文件,然后读取所有图片,然后弄个随机数,然后输出就随便了
  • 打赏
  • 举报
回复
lanbingyi1420 2013-01-27
引用 5 楼 xiaohuh421 的回复:
楼主多查看MSDN吧, 这些都是在MSDN文档中有的.
嗯···多多学习
  • 打赏
  • 举报
回复
lanbingyi1420 2013-01-27
引用 4 楼 xiaohuh421 的回复:
纯win32 API方式. C/C++ code?12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485……
好的 谢谢 先去消化下
  • 打赏
  • 举报
回复
xiaohuh421 2013-01-27
楼主多查看MSDN吧, 这些都是在MSDN文档中有的.
  • 打赏
  • 举报
回复
xiaohuh421 2013-01-27
纯win32 API方式.
#define _WIN32_WINNT 0x0501
#include <Windows.h>
#include <stdio.h>
#include <malloc.h>
#include <tchar.h> 
#include <wchar.h> 
#include <strsafe.h>

#define BUFSIZE MAX_PATH

int _tmain(int argc, TCHAR *argv[])
{
   WIN32_FIND_DATA FindFileData;
   HANDLE hFind = INVALID_HANDLE_VALUE;
   DWORD dwError;
   LPTSTR DirSpec;
   size_t length_of_arg;
   INT retval;

   DirSpec = (LPTSTR) malloc (BUFSIZE);

   if( DirSpec == NULL )
   {
      printf( "Insufficient memory available\n" );
      retval = 1;
      goto Cleanup;
   }

   
   // Check for the directory to query, specified as 
   // a command-line parameter; otherwise, print usage.
   if(argc != 2)
   {
       _tprintf(TEXT("Usage: Test <dir>\n"));
      retval = 2;
      goto Cleanup;
   }

   // Check that the input is not larger than allowed.
   StringCbLength(argv[1], BUFSIZE, &length_of_arg);

   if (length_of_arg > (BUFSIZE - 2))
   {
      _tprintf(TEXT("Input directory is too large.\n"));
      retval = 3;
      goto Cleanup;
   }

   _tprintf (TEXT("Target directory is %s.\n"), argv[1]);

   // Prepare string for use with FindFile functions.  First, 
   // copy the string to a buffer, then append '\*' to the 
   // directory name.
   StringCbCopyN (DirSpec, BUFSIZE, argv[1], length_of_arg+1);
   StringCbCatN (DirSpec, BUFSIZE, TEXT("\\*"), 2*sizeof(TCHAR));

   // Find the first file in the directory.
   hFind = FindFirstFile(DirSpec, &FindFileData);

   if (hFind == INVALID_HANDLE_VALUE) 
   {
      _tprintf (TEXT("Invalid file handle. Error is %u.\n"), 
                GetLastError());
      retval = (-1);
   } 
   else 
   {
      _tprintf (TEXT("First file name is: %s\n"), 
                FindFileData.cFileName);
   
      // List all the other files in the directory.
      while (FindNextFile(hFind, &FindFileData) != 0) 
      {
         _tprintf (TEXT("Next file name is: %s\n"), 
                   FindFileData.cFileName);
      }
    
      dwError = GetLastError();
      FindClose(hFind);
      if (dwError != ERROR_NO_MORE_FILES) 
      {
         _tprintf (TEXT("FindNextFile error. Error is %u.\n"), 
                   dwError);
      retval = (-1);
      goto Cleanup;
      }
   }
   retval  = 0;

Cleanup:
   free(DirSpec);
   return retval;

}
  • 打赏
  • 举报
回复
lanbingyi1420 2013-01-27
引用 1 楼 xiaohuh421 的回复:
文件枚举, 随机取一个打开? 这个是MSDN上的例子, 你自己看着改一下,就成你的了. C/C++ code?1234567891011121314151617181920212223242526272829303132333435void Recurse(LPCTSTR pstr){ CFileFind finder; // build a strin……
能不能不用MFC实现啊
  • 打赏
  • 举报
回复
lanbingyi1420 2013-01-27
能你能不用MFC实现啊?
  • 打赏
  • 举报
回复
xiaohuh421 2013-01-27
文件枚举, 随机取一个打开? 这个是MSDN上的例子, 你自己看着改一下,就成你的了.
void Recurse(LPCTSTR pstr)
{
   CFileFind finder;

   // build a string with wildcards
   CString strWildcard(pstr);
   strWildcard += _T("\\*.*");//这里可以过虑图片, 比如写成: *.bmp.    *.*是指全部类型.

   // start working for files
   BOOL bWorking = finder.FindFile(strWildcard);

   while (bWorking)
   {
      bWorking = finder.FindNextFile();
      
      //finder.GetFilePath()  或者 finder.GetFileName()得到文件名,
      //随机打开一个, 即可在这里随机打开一个后, break,停止查找文件.
      // skip . and .. files; otherwise, we'd
      // recur infinitely!

      if (finder.IsDots())
         continue;

      // if it's a directory, recursively search it

      if (finder.IsDirectory())
      {
         CString str = finder.GetFilePath();
         TRACE(_T("%s\n"), (LPCTSTR)str);
         Recurse(str);
      }
   }

   finder.Close();
}
  • 打赏
  • 举报
回复
相关推荐
发帖
新手乐园
加入

3.3w+

社区成员

C/C++ 新手乐园
社区管理员
  • 新手乐园社区
申请成为版主
帖子事件
创建了帖子
2013-01-27 01:25
社区公告
暂无公告