sposób zapisu do danych do pliku

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
Kumpel poprosił mnie o napisanie programu (nie wiem po co), który w 10 sekund zapisze 40 gb danych na twardzielu. Nie wiem czy zwykłym ofstream uda mi się wylać tyle znaków nawet gdybym w źródle ucapił 100 linijek wiadomości w sensie


wynik == //100 linijek;
ofstream fileOutput("wynik.txt",ios::app);
if(fileOutput.is_open())
{
fileOutput<<wynik<<'\n';
fileOutput.close();
}

znacie jakiś inny sposób ? Może jakiś superpamięciożerny typ tekstowy albo coś fajnego z winapi bo to oczywiście na xp. I pewnie problemem jest żeby system nie odciął mi procesu, to też chyba w winapi. Tak na marginesie to proszę o podanie jakiejś ciekawej i dobrze opisanej strony właśnie o winampi i najlepiej po polsku.
 

Legalnl

Użytkownik
Dołączył
Październik 8, 2008
Posty
828
jak walniesz pętlą jakiś dobry string to mysle ze spokojnie zapełnisz, ale zalezy tez od szybkości dysku i procesora:p
 

tobix10

Użytkownik
Dołączył
Luty 25, 2009
Posty
65
W XP jest fsutil uruchamiany z liniii poleceń

fsutil file createnew <ścieżka> <rozmiar>

np.
fsutil file createnew c:\plik.txt 100

Rozmiar w bajtach.

Nie wiem jaki jest maksymalny rozmiar tworzonego pliku.
smile.gif
 

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
No dobra ale jak to zaimplementować w c++ ? W jakim nagłówku jest ta funkcja ? W necie trochę tego jest, ale ja jeszcze nie pisałem programów korzystających z linii poleceń.

A jeśli chodzi o Twój pomysł legalnl to też na taki wpadłęm, ale wolę użyć fsutila. 40 gb to chyba trochę za dużo...
 

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
O to mi chodziło, ale mam problem.

#include <stdio.h>
#include <stdlib.h>

int main ()
{
int i;
printf ("Checking if processor is available...");
if (system(NULL)) puts ("Ok");
else exit (1);
printf ("Executing command DIR...\n");
i=system ("dir");
printf ("The value returned was: %d.\n",i);
return 0;
}

i teraz jak daje pod ("dir") ("fsutil file createnew c:\test.txt 100"), czyli zamiast
i=system ("dir");
daje
i = system ("fsutil file createnew C:\test.txt 10");
to się kompiluje, ale nie działa, wywala mi --> Użycie: fsutil file createnew <nazwa_pliku> <długość>
Przykład: fsutil file createnew C:\test.txt 1000
W czym błąd ?
 

thc_flow

Zbanowany
Dołączył
Listopad 13, 2008
Posty
649
Whitlock, źle to wywołujesz, musisz dać osobny cudzysłów na komendę (fsutil) a po przecinku drugi z parametrami (file...)
 

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
dir - Wyświetla listę plików i podkatalogów katalogu (opisy i nazwy funkcji wyświetlą się jak wbijesz w cmd.exe i wpiszesz help . Żeby ją uruchomić to możesz
przez start --> uruchom --> cdm.exe --> dir
A tutaj system("DIR"); to wywołanie przez c++. Nagłówek <windows.h>, a resztę znajdziesz w linku, który podał Dark Smark
------------------------
Tak jak mówisz THC Flow to nie moge bo system przyjmuje tylko const char*, a jak daje mu dwa po przecinku to łapie je jako dwie zmienne, a chce jedną. Więc lipa. Próbowałem inaczej zdefiniować funkcję system, tak żeby włąśnie przyjęła mi dwa argumenty, ale to chyba bez sensu bo i tak nie działa: zamiast int system ( const char * command ) dałem int system (const char*, const char*);
Ktoś ma jakiś pomysł ?
 

Dark Smark

Były Moderator
Dołączył
Kwiecień 29, 2006
Posty
1953
Przeczytaj jakąś książkę może... Ja się nie znam ale:
Kod:
#include <string>
using namespace std; 
int main() 
{ 
    string command;
    command="fsutil file createnew C:/data1.txt 99999999";
    system(command.c_str());
    system("PAUSE");
}
 

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
Genialnie Dark Smark ! O to chodziło teraz wszytko działa. Trochę do tego dopieściłem program i dajemy dowolny rozmiar i element docelowy - kumpel się ucieszy. Wszystkim dziękuje za pomoc !
 

tobix10

Użytkownik
Dołączył
Luty 25, 2009
Posty
65
Pewnie problem leżał w użyciu znaku '\'. W C++ jest to znak specjalny, dlatego żeby go użyć trzeba go zapisać 2x '\\'. A że Windows używa backslasha zamiast slasha w ścieżka, dlatego pamiętaj o pisaniu go podwójnie.
 
Do góry Bottom