Overview
Features
Download
Documentation
Community
Add-Ons & Services

how to do IsFolderExist in poco

Please post support and help requests here.

how to do IsFolderExist in poco

Postby vigneshrams » 17 May 2011, 12:15

hi all,
i am new to poco lib.
i am using Poco Net lib for creating FTP related project. i want to know how to check if a folder already exist in the location where i am going to do upload.


Thanks in advance
vigneshrams
 
Posts: 5
Joined: 17 May 2011, 12:10

Re: how to do IsFolderExist in poco

Postby re.tf » 18 May 2011, 00:18

Code: Select all
#include "Poco/File.h"
// ...

Poco::File path("c:\\temp");

if(path.exists())
{
   // Do some thing... c:\\temp exist
}
else
{
   // Do some thing... c:\\temp do not exist
}
re.tf
 
Posts: 41
Joined: 11 Feb 2008, 15:49

Re: how to do IsFolderExist in poco

Postby vigneshrams » 25 May 2011, 14:43

Thanks for the reply.
But i have to know two things one is ,
1. how to do ls cmd using poco like putty does.

2. And i want to know the Isfolderexist in ftp location not in local dir.


Thanks again
vigneshrams
 
Posts: 5
Joined: 17 May 2011, 12:10

Re: how to do IsFolderExist in poco

Postby gregoire » 26 May 2011, 09:27

To do the ls stuff you can use Poco::DirectoryIterator :
[From documentation] The DirectoryIterator class is used to enumerate all files in a directory.


Or maybe have a look at Poco::Glob if you want to do pattern matching on file names.
gregoire
 
Posts: 30
Joined: 27 Jan 2009, 19:23
Location: Grenoble, France

Re: how to do IsFolderExist in poco

Postby vigneshrams » 26 May 2011, 09:41

Thanks gregoire.

Can you also help me how to find isfolderexist in ftp location.


Thanks again.
vigneshrams
 
Posts: 5
Joined: 17 May 2011, 12:10

Re: how to do IsFolderExist in poco

Postby gregoire » 26 May 2011, 15:16

You can try Poco::Net::FTPClientSession. You'll be able to open a ftp session and then go to a specific folder, list files in it, etc.
gregoire
 
Posts: 30
Joined: 27 Jan 2009, 19:23
Location: Grenoble, France

Re: how to do IsFolderExist in poco

Postby developerx » 10 Jul 2012, 08:55

Hello!
I lost much time while found good example to use FTP in Poco libraries, but I found it!
Why it doesn't contains in Poco 1.4.3 Net samples?

Code: Select all
//
// FTPClientSessionTest.cpp
//
// $Id: //poco/1.3/Net/testsuite/src/FTPClientSessionTest.cpp#1 $
//
// Copyright (c) 2005-2006, Applied Informatics Software Engineering GmbH.
// and Contributors.
//
// Permission is hereby granted, free of charge, to any person or organization
// obtaining a copy of the software and accompanying documentation covered by
// this license (the "Software") to use, reproduce, display, distribute,
// execute, and transmit the Software, and to prepare derivative works of the
// Software, and to permit third-parties to whom the Software is furnished to
// do so, all subject to the following:
//
// The copyright notices in the Software and this entire statement, including
// the above license grant, this restriction and the following disclaimer,
// must be included in all copies of the Software, in whole or in part, and
// all derivative works of the Software, unless such copies or derivative
// works are solely in the form of machine-executable object code generated by
// a source language processor.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
// SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
// FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
//


#include "FTPClientSessionTest.h"
#include "CppUnit/TestCaller.h"
#include "CppUnit/TestSuite.h"
#include "DialogServer.h"
#include "Poco/Net/FTPClientSession.h"
#include "Poco/Net/DialogSocket.h"
#include "Poco/Net/SocketAddress.h"
#include "Poco/Net/NetException.h"
#include "Poco/Thread.h"
#include "Poco/ActiveMethod.h"
#include "Poco/StreamCopier.h"
#include <sstream>


using Poco::Net::FTPClientSession;
using Poco::Net::DialogSocket;
using Poco::Net::SocketAddress;
using Poco::Net::FTPException;
using Poco::ActiveMethod;
using Poco::ActiveResult;
using Poco::StreamCopier;
using Poco::Thread;


namespace
{
   class ActiveDownloader
   {
   public:
      ActiveDownloader(FTPClientSession& session):
         download(this, &ActiveDownloader::downloadImp),
         _session(session)
      {
      }
      
      ActiveMethod<std::string, std::string, ActiveDownloader> download;
      
   protected:
      std::string downloadImp(const std::string& path)
      {
         std::istream& istr = _session.beginDownload(path);
         std::ostringstream ostr;
         StreamCopier::copyStream(istr, ostr);
         _session.endDownload();
         return ostr.str();
      }
      
   private:
      FTPClientSession& _session;
   };
};


FTPClientSessionTest::FTPClientSessionTest(const std::string& name): CppUnit::TestCase(name)
{
}


FTPClientSessionTest::~FTPClientSessionTest()
{
}


void FTPClientSessionTest::testLogin()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.login("user", "password");
   std::string cmd = server.popCommand();
   assert (cmd == "USER user");
   cmd = server.popCommand();
   assert (cmd == "PASS password");
   cmd = server.popCommand();
   assert (cmd == "TYPE I");
   
   assert (session.getFileType() == FTPClientSession::TYPE_BINARY);
   
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testLoginFailed1()
{
   DialogServer server;
   server.addResponse("421 localhost FTP not ready");
   FTPClientSession session("localhost", server.port());
   try
   {
      session.login("user", "password");
      fail("server not ready - must throw");
   }
   catch (FTPException&)
   {
   }
   server.addResponse("221 Good Bye");   
   session.close();
}


void FTPClientSessionTest::testLoginFailed2()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("530 Login incorrect");
   FTPClientSession session("localhost", server.port());
   try
   {
      session.login("user", "password");
      fail("login incorrect - must throw");
   }
   catch (FTPException&)
   {
   }
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testCommands()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.login("user", "password");
   std::string cmd = server.popCommand();
   assert (cmd == "USER user");
   cmd = server.popCommand();
   assert (cmd == "PASS password");
   cmd = server.popCommand();
   assert (cmd == "TYPE I");
   
   // systemType
   server.clearCommands();
   server.addResponse("215 UNIX Type: L8 Version: dummyFTP 1.0");
   std::string type = session.systemType();
   cmd = server.popCommand();
   assert (cmd == "SYST");
   assert (type == "UNIX Type: L8 Version: dummyFTP 1.0");
   
   // getWorkingDirectory
   server.addResponse("257 /"/usr/test/" is current directory");
   std::string cwd = session.getWorkingDirectory();
   cmd = server.popCommand();
   assert (cmd == "PWD");
   assert (cwd == "/usr/test");

   // getWorkingDirectory (quotes in filename)
   server.addResponse("257 /"/"/"quote/"/"/" is current directory");
   cwd = session.getWorkingDirectory();
   cmd = server.popCommand();
   assert (cmd == "PWD");
   assert (cwd == "/"quote/"");
   
   // setWorkingDirectory
   server.addResponse("250 CWD OK");
   session.setWorkingDirectory("test");
   cmd = server.popCommand();
   assert (cmd == "CWD test");
   
   server.addResponse("250 CDUP OK");
   session.cdup();
   cmd = server.popCommand();
   assert (cmd == "CDUP");
   
   // rename
   server.addResponse("350 File exists, send destination name");
   server.addResponse("250 Rename OK");
   session.rename("old.txt", "new.txt");
   cmd = server.popCommand();
   assert (cmd == "RNFR old.txt");
   cmd = server.popCommand();
   assert (cmd == "RNTO new.txt");
   
   // rename (failing)
   server.addResponse("550 not found");
   try
   {
      session.rename("old.txt", "new.txt");
      fail("not found - must throw");
   }
   catch (FTPException&)
   {
   }
   server.clearCommands();
   
   // remove
   server.addResponse("250 delete ok");
   session.remove("test.txt");
   cmd = server.popCommand();
   assert (cmd == "DELE test.txt");

   // remove (failing)
   server.addResponse("550 not found");
   try
   {
      session.remove("test.txt");
      fail("not found - must throw");
   }
   catch (FTPException&)
   {
   }
   server.clearCommands();

   // createDirectory
   server.addResponse("257 dir created");
   session.createDirectory("foo");
   cmd = server.popCommand();
   assert (cmd == "MKD foo");

   // createDirectory (failing)
   server.addResponse("550 exists");
   try
   {
      session.createDirectory("foo");
      fail("not found - must throw");
   }
   catch (FTPException&)
   {
   }
   server.clearCommands();

   // removeDirectory
   server.addResponse("250 RMD OK");
   session.removeDirectory("foo");
   cmd = server.popCommand();
   assert (cmd == "RMD foo");

   // removeDirectory (failing)
   server.addResponse("550 not found");
   try
   {
      session.removeDirectory("foo");
      fail("not found - must throw");
   }
   catch (FTPException&)
   {
   }
   server.clearCommands();
      
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testDownloadPORT()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.setPassive(false);
   session.login("user", "password");
   server.clearCommands();
   
   server.addResponse("500 EPRT not understood");
   server.addResponse("200 PORT OK");
   server.addResponse("150 Sending data/r/n226 Transfer complete");

   ActiveDownloader dl(session);
   ActiveResult<std::string> result = dl.download("test.txt");
      
   std::string cmd = server.popCommandWait();
   assert (cmd.substr(0, 4) == "EPRT");
   
   cmd = server.popCommandWait();
   assert (cmd.substr(0, 4) == "PORT");

   std::string dummy;
   int x, lo, hi;
   for (std::string::iterator it = cmd.begin(); it != cmd.end(); ++it)
   {
      if (*it == ',') *it = ' ';
   }
   std::istringstream istr(cmd);
   istr >> dummy >> x >> x >> x >> x >> hi >> lo;
   int port = hi*256 + lo;

   cmd = server.popCommandWait();
   assert (cmd == "RETR test.txt");

   SocketAddress sa("localhost", (Poco::UInt16) port);
   DialogSocket dataSock;
   dataSock.connect(sa);

   std::string data("This is some data");
   dataSock.sendString(data);
   dataSock.close();

   result.wait();
   std::string received = result.data();
   assert (received == data);
   
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testDownloadEPRT()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.setPassive(false);
   session.login("user", "password");
   server.clearCommands();
   
   server.addResponse("200 EPRT OK");
   server.addResponse("150 Sending data/r/n226 Transfer complete");

   ActiveDownloader dl(session);
   ActiveResult<std::string> result = dl.download("test.txt");
      
   std::string cmd = server.popCommandWait();
   assert (cmd.substr(0, 4) == "EPRT");
   
   std::string dummy;
   char c;
   int d;
   int port;
   std::istringstream istr(cmd);
   istr >> dummy >> c >> d >> c >> d >> c >> d >> c >> d >> c >> d >> c >> port >> c;
   
   cmd = server.popCommandWait();
   assert (cmd == "RETR test.txt");
   
   SocketAddress sa("localhost", (Poco::UInt16) port);
   DialogSocket dataSock;
   dataSock.connect(sa);

   std::string data("This is some data");
   dataSock.sendString(data);
   dataSock.close();

   result.wait();
   std::string received = result.data();
   assert (received == data);
   
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testDownloadPASV()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.login("user", "password");
   server.clearCommands();

   server.addResponse("500 EPSV not understood");

   DialogServer dataServer(false);
   dataServer.addResponse("This is some data");
   std::ostringstream pasv;
   pasv << "227 Entering Passive Mode (127,0,0,1," << (dataServer.port()/256) << "," << (dataServer.port() % 256) << ")";
   server.addResponse(pasv.str());
   server.addResponse("150 sending data/r/n226 Transfer complete");

   std::istream& istr = session.beginDownload("test.txt");
   std::ostringstream dataStr;
   StreamCopier::copyStream(istr, dataStr);
   session.endDownload();
   std::string s(dataStr.str());
   assert (s == "This is some data/r/n");
   
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testDownloadEPSV()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.login("user", "password");
   server.clearCommands();

   DialogServer dataServer(false);
   dataServer.addResponse("This is some data");
   std::ostringstream epsv;
   epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)";
   server.addResponse(epsv.str());
   server.addResponse("150 sending data/r/n226 Transfer complete");

   std::istream& istr = session.beginDownload("test.txt");
   std::ostringstream dataStr;
   StreamCopier::copyStream(istr, dataStr);
   session.endDownload();
   std::string s(dataStr.str());
   assert (s == "This is some data/r/n");
   
   std::string cmd = server.popCommand();
   assert (cmd.substr(0, 4) == "EPSV");
   cmd = server.popCommand();
   assert (cmd == "RETR test.txt");
   
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testUpload()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.login("user", "password");
   server.clearCommands();

   DialogServer dataServer;
   std::ostringstream epsv;
   epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)";
   server.addResponse(epsv.str());
   server.addResponse("150 send data/r/n226 Transfer complete");

   std::ostream& ostr = session.beginUpload("test.txt");
   ostr << "This is some data/r/n";
   session.endUpload();
   std::string s(dataServer.popCommandWait());
   assert (s == "This is some data");

   std::string cmd = server.popCommand();
   assert (cmd.substr(0, 4) == "EPSV");
   cmd = server.popCommand();
   assert (cmd == "STOR test.txt");

   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::testList()
{
   DialogServer server;
   server.addResponse("220 localhost FTP ready");
   server.addResponse("331 Password required");
   server.addResponse("230 Welcome");
   server.addResponse("200 Type set to I");
   FTPClientSession session("localhost", server.port());
   session.login("user", "password");
   server.clearCommands();

   DialogServer dataServer(false);
   dataServer.addResponse("file1/r/nfile2");
   std::ostringstream epsv;
   epsv << "229 Entering Extended Passive Mode (|||" << dataServer.port() << "|)";
   server.addResponse(epsv.str());
   server.addResponse("150 sending data/r/n226 Transfer complete");

   std::istream& istr = session.beginList();
   std::ostringstream dataStr;
   StreamCopier::copyStream(istr, dataStr);
   session.endList();
   std::string s(dataStr.str());
   assert (s == "file1/r/nfile2/r/n");
   
   std::string cmd = server.popCommand();
   assert (cmd.substr(0, 4) == "EPSV");
   cmd = server.popCommand();
   assert (cmd == "NLST");
   
   server.addResponse("221 Good Bye");
   session.close();
}


void FTPClientSessionTest::setUp()
{
}


void FTPClientSessionTest::tearDown()
{
}


CppUnit::Test* FTPClientSessionTest::suite()
{
   CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("FTPClientSessionTest");

   CppUnit_addTest(pSuite, FTPClientSessionTest, testLogin);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testLoginFailed1);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testLoginFailed2);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testCommands);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadPORT);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadEPRT);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadPASV);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testDownloadEPSV);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testUpload);
   CppUnit_addTest(pSuite, FTPClientSessionTest, testList);

   return pSuite;
}
developerx
 
Posts: 3
Joined: 10 Jul 2012, 08:48


Return to Support

Who is online

Users browsing this forum: weloveapps and 2 guests

cron