Форум программистов, компьютерный форум, киберфорум
Наши страницы
C (Си)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
red_square
2 / 2 / 3
Регистрация: 07.10.2013
Сообщений: 48
1

Не могу записать буффер в файл через fwrite

30.12.2015, 19:36. Просмотров 423. Ответов 1
Метки нет (Все метки)

Добрый вечер.

Пишу одну программку, и никак не получается записать буффер в файл.

Файл создаётся, а там либо 0 байт, либо какое-то случайное число.

Свойства созданного файла в изображении.

Прошу помочь, кто может, так как не могу найти ошибку, а скоро сдавать.

main:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
 
#include "steglib.h"
 
int main(int argc, char *argv[]){
 
     char* message;
 
     char* mkr = "MKR";
 
     char* source_file_name;
 
     char* stego_file_name;
 
     int copy_result = 0;
     
     if ( argc <= 2 ) {
 
        printf("Error: no input or output specified\n");
 
    return -1;
     }
     else
     if ( argc > 3 ) {
 
        printf("Error: unknown arguments present\n");
 
    return -1;
     }
     else
     if ( argc == 3 ){
 
      /* Allocating memory for strings */
      message = (char *)malloc( 4096 );
      if (!message)
      {
        printf( "Error: cannot allocate memory for message\n ");
        return -1;
      }
 
      source_file_name = (char *)malloc( 4096 );
      if (!source_file_name)
      {
        printf( "Error: cannot allocate memory for source_file_name\n ");
        return -1;
      }
 
      stego_file_name = (char *)malloc( 4096 );
      if (!stego_file_name)
      {
        printf( "Error: cannot allocate memory for stego_file_name\n ");
        return -1;
      }
 
      source_file_name = argv[1];
 
      stego_file_name = argv[2];
 
      /* Protection from accidentally overwriting important user data */
      copy_result = cp(stego_file_name, source_file_name);
      
      if(copy_result != 0){
        printf("Cannot make a clean copy of file or pointing to already existing file. Exiting.\n");
        return -1;
      }
 
      printf("Type your phrase: ");
 
      scanf("%s", message);
 
      hide_msg(message, stego_file_name, mkr);
 
     }
 
     return 0;
}
Библиотека:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/* Including standard libraries */
 
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <ctype.h>
 
/* Including our own function headers */
 
#include "steglib.h"
 
/*
 * Function to hide a message inside a BMP image file.
 * Returns: size of buffer / file contents
 */
 
int hide_msg(char* secret_msg, char* filename, char* MARKER){
 
     int i = 0;
     
     int place_required;
 
     void* buffer;
 
     char* secret;
 
     size_t fileLen;
 
     size_t file_length = 0;
 
     secret = (char *)malloc(sizeof(3*sizeof(MARKER)+sizeof(filename)+sizeof(secret_msg)));
 
     /* Concatenating strings in format: MARKER + src_filename + MARKER + secret_msg + MARKER */ 
 
     strcpy(secret, MARKER);
 
     strcat(secret, filename);
 
     strcat(secret, MARKER);
 
     strcat(secret, secret_msg);
 
     strcat(secret, MARKER);
 
     file_length = read_file( filename, buffer );
 
     place_required = 8 * sizeof(secret) - file_length;
 
     if(place_required > 0){
        printf("BMP size is not sufficient! Another %d bytes required!", place_required);
     }
 
//     dump_buffer(buffer, file_length);
     write_file(filename, buffer, file_length);
    
     return 0;
}
 
/*
 * Function to write contents of a buffer in a file
 * and get its size.
 * Returns: result of I/O operations 
 */
 
int write_file( char *name, void *buf, size_t buffer_size){
 
  FILE *pFile;
  int function_result;
  pFile = fopen(name, "wb");
  printf("DEBUG: WFILE"); 
  function_result = fwrite (buf, 1, buffer_size, pFile);
  printf("DEBUG: WFILE1");
  fclose (pFile);
  return function_result;
}
 
/*
 * Function to read contents of a file in a buffer
 * and get its size.
 * Returns: size of buffer / flie contents 
 */
 
size_t read_file( char *name, void *buffer )
{
    FILE *file1;
        size_t fileLen;
  
    //Open file
    file1 = fopen(name, "rb");
    if (!file1)
    {
        fprintf(stderr, "Unable to open file %s", name);
        return;
    }
    
    //Get file length
    fseek(file1, 0, SEEK_END);
    fileLen = ftell(file1);
    fseek(file1, 0, SEEK_SET);
 
    //Allocate memory
    buffer = (void *)malloc(fileLen+1);
    if (!buffer)
    {
        fprintf(stderr, "Error: cannot allocate memory for picture\n");
                fclose(file1);
        return;
    }
 
    //Read file contents into buffer
    fread(buffer, fileLen, 1, file1);
    fclose(file1);
 
    return fileLen;
}
 
/* 
 * Function to view current memory(buffer) dump 
 * in hex. Returns nothing.
 */
 
void dump_buffer(void *buffer, int buffer_size)
{
  int i;
 
  for( i = 0; i < 200; i++)
     printf("%02X ", ((char *)buffer)[i]);
}
0
Миниатюры
Не могу записать буффер в файл через fwrite  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2015, 19:36
Ответы с готовыми решениями:

Запись в файл через fwrite
Хочу записать число типа int в файл. Открываю файл и вижу символы, чисел нет ... #include...

Ошибки при запись в файл через fwrite
FILE*f = fopen(&quot;book.txt&quot;, &quot;wb&quot;); fwrite(&quot;s&quot; , sizeof(char),1, f); int notesize =...

Считываю с потока файл пакетами -> сохраняю файл. что использовать на Qt вместо fwrite?
пока программа не компилируется, успела только прописать вот такой код QString...

Не могу понять функцию fwrite()
Приветствую всех! Прошу объяснить почему при записи на файл структуру выходит только надпись Hello...

Создание 2Д графики на Си/С++ через собственный буффер(массив/матрицу)
В общем, нужна информация или простенькие примеры как можно выводить собственный массив пикселей на...

1
sharpey
365 / 155 / 37
Регистрация: 21.09.2008
Сообщений: 518
02.01.2016, 08:54 2
Листинг заголовка steglib.h будет опубликован Вами?
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.01.2016, 08:54

Не могу записать в файл
Доброго времени суток. Не могу осуществить запись в текстовый файл. Ошибок никаких не выдаёт, но...

Не могу записать файл
unauthorizedexception. Запускаю студию от имени администратора со всеми правами

Не могу записать в файл
Доброго времени суток. Хочу стандартными средствами винды осуществлять запись строк в файл (vbs...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru