xevuel |
» 2012-04-05 17:10:02 Jeśli folder nie istnieje, nie możesz w nim utworzyć pliku. Poza tym - pamiętasz o podwójnych backslashach (\\)? |
|
pawajoro Temat założony przez niniejszego użytkownika |
» 2012-04-05 17:55:05 A można "założyć" folder w programie ? Czy nie ma żadnego ratunku ?
P.S. A po co 2x backslash? Jak był zwykły ukośnik, to też działało. |
|
xevuel |
» 2012-04-05 19:35:06 Windows: [MSDN] CreateDirectoryLinux: #include <sys/stat.h> mkdir( const char * path, mode_t mode );
Co do Linuksa nie mam pewności, bo go nie używam, takie coś znalazłem w google. Co do backslashy to ścieżkę musisz podawać tak: "C:\\Windows\\test" , bo gdyby tam byłby tylko jeden backslash, to kompilator potraktował by to jako znak tabulacji (\t) i stworzył błędną ścieżkę albo w ogóle jej nie utworzył. |
|
pawajoro Temat założony przez niniejszego użytkownika |
» 2012-04-05 21:02:48 I są problemy... void sklej( string url[], string autor[], string dod[], string wer[], int k ) { int c = 0; do { string curl = "C:/Kuidland/GO/package/"; BOOL WINAPI CreateDirectory( curl, NULL ); curl.append( autor[ c ] ); curl.append( "/" ); BOOL WINAPI CreateDirectory( curl, NULL ); curl.append( dod[ c ] ); curl.append( "/" ); BOOL WINAPI CreateDirectory( curl, NULL ); curl.append( wer[ c ] ); curl.append( "/" ); BOOL WINAPI CreateDirectory( curl, NULL ); curl.append( "kuid.txt" ); url[ c ] = curl; c++; } while( c <= k ); }
Kompilator krzyczy: Compiling: C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp: In function 'void sklej(std::string*, std::string*, std::string*, std::string*, int)': C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:102: warning: '__stdcall__' attribute only applies to function types C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:102: error: initializer expression list treated as compound expression C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:105: warning: '__stdcall__' attribute only applies to function types C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:105: error: redeclaration of 'BOOL CreateDirectoryA' C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:102: error: 'BOOL CreateDirectoryA' previously declared here C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:108: warning: '__stdcall__' attribute only applies to function types C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:108: error: redeclaration of 'BOOL CreateDirectoryA' C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:102: error: 'BOOL CreateDirectoryA' previously declared here C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:111: warning: '__stdcall__' attribute only applies to function types C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:111: error: redeclaration of 'BOOL CreateDirectoryA' C:\Users\User\Documents\Kuidland dokumentacja\GO!\1.0.cpp:102: error: 'BOOL CreateDirectoryA' previously declared here Process terminated with status 1 (0 minutes, 4 seconds) 7 errors, 4 warnings
|
|
xevuel |
» 2012-04-05 21:04:14 Funkcje w WinAPI są normalnymi funkcjami. To po co ci "BOOL WINAPI"?? Poza tym, nie musisz wywoływać 100 razy CreateDirectory. Wystarczy raz w postaci "abc/xyz/aaa" . |
|
pawajoro Temat założony przez niniejszego użytkownika |
» 2012-04-05 21:11:06 A folder docelowy świeci pustką. Program kompiluje się normalnie. #include <iostream> #include <fstream> #include <string> #include <conio.h> #include <stdio.h> #include <curl/curl.h> #include <sstream> #include <windows.h>
using namespace std;
int linijki( fstream & plik ) { if( plik.good() ) { string napis; int c = - 1; while( !plik.eof() ) { getline( plik, napis ); c++; } return( c ); } else cout << "Error! Nie udalo przetworzyc sie pliku!(106)" << endl; return 0; }
void tablica( fstream & plik, string napis[], int i ) { int c = 0; while( c < i ) { getline( plik, napis[ c ] ); c++; } }
void CreateFile( const char * p ) { std::ofstream f( p ); }
void wypisztablice( string napis[], int i ) { int c = 0; do { cout << c << ": " << napis[ c ] << endl; c++; } while( c < i ); }
void rozdziel( string kuidy[], string autor[], string dod[], string wer[], int k ) { int c = 0; do { string tekst; tekst.insert( 0, kuidy[ c ] ); int nos; nos = tekst.find( "<" ); size_t d1; size_t d2; size_t d3; d1 = tekst.find( ":", nos + 1 ); d2 = tekst.find( ":", d1 + 1 ); d3 = tekst.find( ":", d2 + 1 ); string s1; string s2; string s3; int iz1; int iz2; if( d3 == std::string::npos ) { s3 = "0"; size_t dk = tekst.find( ">", d2 + 1 ); iz2 = dk - d2 - 1; } else { iz2 = d3 - d2 - 1; s3.insert( 0, tekst,( d3 + 1 ), 1 ); } s2.insert( 0, tekst,( d2 + 1 ), iz2 ); iz1 = d2 - d1 - 1; s1.insert( 0, tekst,( d1 + 1 ), iz1 ); autor[ c ].insert( 0, s1 ); dod[ c ].insert( 0, s2 ); wer[ c ].insert( 0, s3 ); c++; } while( c <= k ); }
void sklej( string url[], string autor[], string dod[], string wer[], int k ) { int c = 0; do { string curl = "C:\\Kuidland\\GO\\package\\"; CreateDirectory( curl.c_str(), NULL ); curl.append( autor[ c ] ); curl.append( "\\" ); CreateDirectory( curl.c_str(), NULL ); curl.append( dod[ c ] ); curl.append( "\\" ); CreateDirectory( curl.c_str(), NULL ); curl.append( wer[ c ] ); curl.append( "\\" ); CreateDirectory( curl.c_str(), NULL ); curl.append( "kuid.txt" ); url[ c ] = curl; c++; } while( c <= k ); }
bool url( string url[], int k ) { fstream plik2; plik2.open( "C:\\Kuidland\\GO!\\url.txt", ios::in ); if( plik2.good() ) { int i = linijki( plik2 ); plik2.close(); if( i != k ) { fstream plik; plik.open( "C:\\Kuidland\\GO!\\url.txt", ios::in ); if( plik.good() ) { tablica( plik, url, i ); plik.close(); return true; } else cout << "Nieprawidlowa suma kontrolna!(105)"; } else cout << "Error! Nie udalo otworzyc sie pliku!(104)" << endl; } else cout << "Error! Nie udalo otworzyc sie pliku!(103)" << endl; return false; }
void perform( string url[], string texturl[], int k ) { int c = 0; cout << "Teraz bedziemy robic paczke..." << endl; do { cout << "Dodatek nr " << c << endl; cout << "Konwertowanie adresu..." << endl; const char * na = texturl[ c ].c_str(); printf( na ); cout << "Skonwertowano!" << endl << "Otwieranie pliku..." << endl; CreateFile( na ); cout << "Utworzono nowy plik!" << endl; fstream plik; plik.open( na, ios::out ); cout << "Hej!"; if( plik.good() ) { cout << "Otwarto!" << endl << "Zapisywanie..." << endl; plik << url[ c ]; cout << "Zapisano!" << endl << "Zamykanie..." << endl; plik.close(); cout << "Zamknieto!" << endl; } cout << "Blawisko!"; c++; cout << "tu"; } while( c <= k ); }
int main() { cout << "Aplikacja do pobierania KUID'ow 'Kuidland' Wersja 1.5 " << endl << endl; fstream plik2; plik2.open( "C:\\Kuidland\\GO!\\kuid.txt", ios::in ); if( plik2.good() ) { int i = linijki( plik2 ); plik2.close(); fstream plik; plik.open( "C:\\Kuidland\\GO!\\kuid.txt", ios::in ); if( plik.good() ) { string kuidy[ i + 1 ]; tablica( plik, kuidy, i ); int k = i - 1; string autor[ k + 1 ]; string dod[ k + 1 ]; string wer[ k + 1 ]; string html[ k + 1 ]; rozdziel( kuidy, autor, dod, wer, k ); string texturl[ k + 1 ]; sklej( texturl, autor, dod, wer, k ); url( html, k ); perform( html, texturl, k ); plik.close(); } else cout << "Error! Nie udalo otworzyc sie pliku!(102)" << endl; } else cout << "Error! Nie udalo otworzyc sie pliku! (101)" << endl; getch(); return 0; }
EDYTA: Ze strony MS-a, którą mi podałeś: ERROR_PATH_NOT_FOUND
One or more intermediate directories do not exist; this function will only create the final directory in the path. |
|
|
xevuel |
» 2012-04-05 21:15:05 Akurat w kwestii fstream ci nie pomogę, bo zbyt często go nie używałem, ale wydaje mi się że kod ofstream txt; txt.open( "tekst.txt", ios::app );
powinien pomóc. Jak już korzystasz z WinAPI to jest jeszcze taka funkcja: [MSDN] CreateFile. //Edit: Mi wywołanie CreateDirectory tworzyło od razu kilka katalogów. //Edit2: A po wywoływaniu kilkakrotnym CreateDirectory foldery się pojawiały? |
|
pawajoro Temat założony przez niniejszego użytkownika |
» 2012-04-05 21:16:43 Źle mnie zrozumiałeś, folderów też nie ma...
EDYTA: Nic a nic. Wykrzyknik w nazwie robi burdel? |
|
1 « 2 » 3 4 |