Find and replace (overwriting) to the middle of an existing binary file
    15 views (last 30 days)
  
       Show older comments
    
    Behzad Hosseinzadeh
 on 28 Mar 2021
  
    
    
    
    
    Commented: Behzad Hosseinzadeh
 on 29 Mar 2021
            I'm trying to open a binary file for replacing without erasing all the content. For example I can read my binary file and convert it to the struct as follows, what I want to do is that to replace data section with my own data:
    if ~exist('filename', 'var')
    error(['''' filename ''' does not exist']); end
    % Open file
    fclose all;
    fid = fopen(filename);
    if fid < 3; error 'Error while opening file'; end
    % Read one property at the time
    while ~feof(fid)        
        % Read field name (keyword) and array size
        keyword = deblank(fread(fid, 8, 'uint8=>char')');
        num = fread(fid, 1, 'int32=>double', 0, 'b');
        % Read and interpret data type
        conv = 'single=>double';
        wsize = 4;
        % Read data array, which may be split into several consecutive arrays
        data = [];
        remnum = num;
        while remnum > 0
            % Read array size
            buflen = fread(fid, 1, 'int32=>double', 0, 'b');
            bufnum = buflen / wsize;
            % Read data and append to array
            %%% REPLACE DATA WITH NEW DATA %%%%
            data = [data; fread(fid, bufnum, conv, 0, 'b')]; %<<========HERE========
            remnum = remnum - bufnum;
        end
    end
    fclose(fid);
0 Comments
Accepted Answer
  Jeremy Hughes
    
 on 28 Mar 2021
        fopen(filename,'a') % append mode
Then use fseek to go to where you want to overwrite.
4 Comments
  Jeremy Hughes
    
 on 28 Mar 2021
				Yes, Walter is correct. I didn't read carefully enough. 'r+' mode allows you to move to a position in the file using fseek. fwrite should then write into the file at that position
More Answers (0)
See Also
Categories
				Find more on Low-Level File I/O in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!