Cześć.
Mam problem z odczytem plików i przesłaniem ich do komponentu TextEditor w JUCE. Wczytywać coś tam wczytuje ale zajmuje to koszmarnie dużo czasu (2 MB parę minut).
Kod to mniej więcej to:
class MainComponent : public juce::Component
{
public:
juce::TextButton open_button{"Open"};
juce::TextEditor texteditor;
MainComponent()
{
setSize (700, 500);
close_button.setBounds(0,0,200,50);
addAndMakeVisible(open_button);
text_editor.setBounds(0,60,500,350);
addAndMakeVisible(text_editor);
text_editor.setMultiLine(true,true);
open_button.onClick = [this](){
/* utworzenie komponentu fileChooser */
fChooser = std::make_unique<juce::FileChooser>("Choose file",
defaultDirectory, "*.*", true, false, this);
auto folderChooserFlags = juce::FileBrowserComponent::openMode
| juce::FileBrowserComponent::canSelectDirectories |
juce::FileBrowserComponent::canSelectFiles;
/* uruchomienie fileChooser*/
fChooser->launchAsync(folderChooserFlags, [this](const juce::FileChooser& chooser)
{
juce::File chosenFile = chooser.getResult();
juce::String tmp_path= chosenFile.getFullPathName();
oldPath=tmp_path;
char file_path[555];
// zmienne do odebrania zmiennej z fgetc i wskazniki do plikow
int tmp_int;
FILE *file_1,*file_2;
strcpy(file_path,tmp_path.toRawUTF8());
juce::FileInputStream input_stream{chosenFile};
juce::int64 size_of_file;
juce::String new_tmp_string;
juce::String new_output_string="";
// pobranie rozmiaru pliku (gdyby zaszla koniecznosc utworzenia dynamicznej tablicy do przechowania zawartosci pliku)
size_of_file=input_stream.getTotalLength();
juce::String str = juce::String(size_of_file);
// tworzy plik zeby mozna było sprawdzic czy sciezka pliku jest rozmiar sa odpowiednie
file_1=fopen("K:\\a.txt","w");
fprintf(file_1,"%s%s%s",file_path,",",str);
fclose(file_1);
file_2=fopen(file_path,"rb");
//wczytuje binarnie zawartosc zamienia to na ciagi znakow w systemie dziesietnym
//i tworzy lancuch ktory zostanie zaladowany do komponentu textEditor
while(!feof(file_2)){
tmp_int=fgetc(file_2);
new_tmp_string=juce::String(tmp_int);
new_output_string+=new_tmp_string;
new_output_string+=" , ";}
fclose(file_2);
// wczytywanie zawartosci pliku do TextEditor
text_editor.setText(new_output_string,true);
// ustawienie textu na przycisku zeby pokazal rozmiar wybranego pliku
open_button.setButtonText(str);
// ustawienie nowego folderu domyslnego ktory byl uzywany przez uzytkownika
defaultDirectory=oldPath;
});
//..
}
Wczytywać coś tam wczytuje ale pracować to się na tym nie da. WinHex pokazywał bez przycinania całe partycje, Paragon Partition Menager tak samo, i to 10 lat temu.