hab die Methode ausm Internet... aber egal, habs jetzt anders gelöst.
hab das ganze filesystem-durchsuchen in ne mfc anwendung ausgelagert (innerhalb ging net weil ich beinm compilern/linken irgendwelche befehle hatte, die die funktion die ich dann benutz hab, nicht mochte).
das ding hat mich echt nerven gekostet... aber naja nu läufts, hier der code, falls es für jemanden von interesse ist. Das programm gibt die Befehle für nen FTP programm aus, welche man mit > ftp.txt zbs. speichern kann...
C
// filesys.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
//
#include "stdafx.h"
#include <afx.h>
#include <string>
#include <stdio.h>
#include <iostream>
#include <iostream>
#include <ios>
#include <ostream>
#include <fstream>
#include <Windows.h>
#include <cmdtree.h>
using namespace std;
char* conversion(LPCTSTR val);
CString filesys(CString path);
char* cstr2ch(CString str);
void tch2ch(const wchar_t* Src, char* Dest, int Size);
int _tmain(int argc, _TCHAR* argv[])
{
char *ftpkram = "open dodo-pwns.de\nweb323\nWagner\ncd html\nmkdir uploadtest\ncd uploadtest\nprompt\n";
//printf(ftpkram);
CString suche = "C:\\temp\\installer_stable\\";
filesys(suche);
char *bye = "bye\n";
printf(bye);
return 0;
}
char* conversion(LPCTSTR val)
{
LPCWSTR wstr = val;
int count = wcslen(wstr);
char* c = new char[count + 1];
wchar_t* pwchr = const_cast<wchar_t*> (&wstr[0]);
for(int j = 0; j < count; ++j)
{
c[j] = static_cast<char> (*pwchr);
pwchr++;
}
c[count] = '\0';
wchar_t *op;
wcstombs(c,val,count);
return c;
}
CString filesys(CString path) {
CString result = "";
char *breaker = "\n";
char *mput = "mput ";
char *back = "cd ..\n";
char *mkdir = "mkdir ";
char *cd = "cd ";
char *stars = "\\*.*";
char *pp = "..";
BOOL finderFound = TRUE;
CFileFind finder;
CString searchString = path + "*";
finderFound = finder.FindFile(searchString);
BOOL wasFolder = FALSE;
char *empty = "";
int oncemore = 1;
while (finderFound) {
LPCWSTR wstr = finder.GetFileTitle();
char *output = conversion(wstr);
if (finder.IsDirectory() && !finder.IsDots()) {
char* folder = "folder: ";
//printf(folder);printf(output);printf(breaker);
char *ort = cstr2ch(path);
// mkdir *folder*\n
printf(mkdir);printf(output);printf(breaker);
// cd *folder*\n
printf(cd);printf(output);printf(breaker);
CString fullpath = path + output;
char * pathing = cstr2ch(fullpath);
//printf(pathing);printf(breaker);
// mput *pathtofolder*\*.*
printf(mput);printf(pathing);printf(stars);printf(breaker);
CString newpath = path + output + "\\";
filesys(newpath);
// cd ..\n
printf(cd);printf(pp);printf(breaker);
}
/*else if (!finder.IsDots() && output != empty) {
char* file = "file: ";
printf(file);printf(output);printf(breaker);
}*/
finderFound = finder.FindNextFile();
if (!finderFound && oncemore == 1) {
oncemore = 0;
finderFound = TRUE;
}
}
finder.Close();
return result;
}
char * cstr2ch(CString str) {
const size_t StringSize = 10000;
size_t CharactersConverted = 0;
char DummyToChar[StringSize];
wcstombs_s(&CharactersConverted, DummyToChar,
str.GetLength()+1, str,
_TRUNCATE);
return DummyToChar;
}
void tch2Ch(const wchar_t* Src, char* Dest, int Size)
{
WideCharToMultiByte(CP_ACP, 0, Src, wcslen(Src)+1, Dest , Size, NULL, NULL);
}
Alles anzeigen
Wahrscheinlich ziemlich unsauber, aber funktioniert...