Кто разбирается в CNI? Файл после чтения становится пустым.

Тема в разделе "WASM.HEAP", создана пользователем device, 19 дек 2007.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Есть код:

    Код (Text):
    1. --------------- a.cpp ------------------
    2.  
    3. #include "module.h"
    4. #include <stdio.h>
    5. #include <stdlib.h>
    6. #include <unistd.h>
    7. #include <sys/ioctl.h>
    8. #include <fcntl.h>
    9.  
    10. void start_module(){
    11.  
    12. put_char("starting...");
    13.  
    14. File *f = new File (JvNewStringUTF ("base"));
    15.  
    16. System::out->println(f->length());
    17.  
    18.  
    19. }
    Код (Text):
    1. ----------- module.h ------------
    2. #include <java/lang/String.h>
    3. #include <java/lang/System.h>
    4. #include <java/io/PrintStream.h>
    5. #include <fstream>
    6. #include <cassert>
    7. #include <map>
    8. #include <stdio.h>
    9. #include <stdlib.h>
    10. #include <gcj/cni.h>
    11. #include <java/io/File.h>
    12. #include <java/io/FileInputStream.h>
    13. #include <java/io/InputStreamReader.h>
    14. #include <java/io/BufferedReader.h>
    15. #include <java/io/PrintWriter.h>
    16. #include <java/io/OutputStreamWriter.h>
    17. #include <java/io/FileOutputStream.h>
    18. #define nstring JvNewStringUTF
    19.  
    20. void start_module();
    21. using namespace java::lang;
    22. using namespace java::io;
    23. using namespace java::net;
    24.  
    25. void init(){
    26.  
    27. JvCreateJavaVM(NULL);
    28. #define MODULE_STARTED
    29. start_module();
    30. }
    31.  
    32. void put_char(char *c){
    33.  
    34. #ifdef MODULE_STARTED    
    35. String *message = nstring(c);
    36. System::out->println(message);
    37. #endif
    38. }
    39.  
    40. void file_create_new(char *filename){
    41.  
    42.     File *f;
    43.     f=new File(nstring(filename));
    44.     f->createNewFile();
    45. }
    46.  
    47.  
    48. int main(){
    49. init();
    50. return 0;
    51.  
    52. }
    Прога выводит длину файла, закрывается и затирает за собой файл, длину которого узнавала:) Почему?
     
  2. twgt

    twgt New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    1.494
    Я, правда тонкостей не знаю, но может стоит f закрывать?!
    Вот более понятный мне вид того, что написанно :)
    Код (Text):
    1. int main(){
    2. JvCreateJavaVM(NULL);
    3. #define MODULE_STARTED
    4.  
    5. #ifdef MODULE_STARTED
    6. String *message = JvNewStringUTF("starting...");
    7. System::out->println(message);
    8. #endif
    9.  
    10. File *f = new File (JvNewStringUTF ("base"));
    11.  
    12. System::out->println(f->length())
    13.  
    14. return 0;
    15. }
     
  3. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Дык нет у struct File методов типа close();

    Файл затирается после любой операции (чтение, вычисление длины, запись).
    Я сделал так: переопределил struct File в заголовочном файле. Это на производительность влияет, но зато надежно.
    Просто в Инете нет почти примеров, когда к С++ подключают заголовочные файлы Java. Все приходится копать вручную.
     
  4. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    У меня вопрос ко всем:
    А будет ли вообще по-дзенски копать в сторону подключеня заголовочных файлов Java к C++ проектам?
    Ведь по сути мы получаем мощную платформу для разработки.