Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Program "strajkuje" i nie otwiera plików

Ostatnio zmodyfikowano 2012-04-06 13:41
Autor Wiadomość
xevuel
» 2012-04-05 17:10:02

foldery też nie istnieją
Jeśli folder nie istnieje, nie możesz w nim utworzyć pliku. Poza tym - pamiętasz o podwójnych backslashach (\\)?
P-53895
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.
P-53899
xevuel
» 2012-04-05 19:35:06
Windows: [MSDN] CreateDirectory

Linux:
C/C++
#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ł.
P-53906
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-04-05 21:02:48
I są problemy...
C/C++
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
P-53915
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"
.
P-53916
pawajoro
Temat założony przez niniejszego użytkownika
» 2012-04-05 21:11:06
A folder docelowy świeci pustką. Program kompiluje się normalnie.
C/C++
#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 a = (szukajznacznika (napis)) ;
            int k = i - 1; // - a - 3 ;
            //string kuidy [k + 1] ;
            //przepiszkuidy ( kuidy, napis, a, k ) ;
            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 );
            //string url [ k+1 ] ;
            //dotxt ( texturl, url, k ) ;
            //dowysylki ( url, 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.
P-53917
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
C/C++
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?
P-53918
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?
P-53919
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona