Read a file into a byte array
| Contents[hide] | 
[edit] Implementations
[edit] C
- #include <stdio.h>
- #include <stdlib.h>
- char* readFileBytes(const char *name)
- {
- FILE *fl = fopen(name, "r");
- fseek(fl, 0, SEEK_END);
- long len = ftell(fl);
- char *ret = malloc(len);
- fseek(fl, 0, SEEK_SET);
- fread(ret, 1, len, fl);
- fclose(fl);
- return ret;
- }
[edit] C++
- #include <iostream>
- #include <fstream>
- char* readFileBytes(const char *name)
- {
- ifstream fl(name);
- fl.seekg( 0, ios::end );
- size_t len = fl.tellg();
- char *ret = new char[len];
- fl.seekg(0, ios::beg);
- fl.read(ret, len);
- fl.close();
- return ret;
- }
[edit] C#
- var bytes = System.IO.File.ReadAllBytes(name);
[edit] Common Lisp
The following does not work with multibyte streams. The common lisp stream must be single-byte for this particular function.
; here's the function
(defun slurp-stream4 (stream)
  (let ((seq (make-string (file-length stream))))
    (read-sequence seq stream)
    seq))
;open up a stream:
(with-open-file (stream "filename.txt"))
  ;; call the function and return the string.
  (slurp-stream4 stream))
This is from [1].
[edit] Java
This method reads the entire content of a file into a byte array.
- // Returns the contents of the file in a byte array.
- public static byte[] getBytesFromFile(File file) throws IOException {
- InputStream is = new FileInputStream(file);
- byte[] bytes;
- try {
- // Get the size of the file
- long length = file.length();
- // You cannot create an array using a long type.
- // It needs to be an int type.
- // Before converting to an int type, check
- // to ensure that file is not larger than Integer.MAX_VALUE.
- if (length > Integer.MAX_VALUE) {
- // File is too large (>2GB)
- }
- // Create the byte array to hold the data
- bytes = new byte[(int)length];
- // Read in the bytes
- int offset = 0;
- int numRead = 0;
- while (offset < bytes.length
- && (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
- offset += numRead;
- }
- // Ensure all the bytes have been read in
- if (offset < bytes.length) {
- throw new IOException("Could not completely read file " + file.getName());
- }
- }
- finally {
- // Close the input stream and return bytes
- is.close();
- }
- return bytes;
- }
[edit] OCaml
# let get_bytes_from_file filename =
    let ch = open_in filename in
    let buf = Buffer.create 1024 in
    (try Buffer.add_channel buf ch max_int with _ -> ());
    close_in ch;
    buf;;
val get_bytes_from_file : string -> Buffer.t = <fun>
[edit] Perl
use File::Slurp (read_file);
my $slurped = read_file('filename');
[edit] Python
Python 2.x's "str" type acts as an (immutable) byte array (not a true char array), so the following suffices:
- def get_bytes_from_file(filename):
- return open(filename, "rb").read()
[edit] Ruby
Since String objects 'hold and manipulate an arbitrary sequence of bytes' (Source), simply reading a file into a String will suffice.
- def get_bytes_from_file(filename)
- File.read(filename)
- end
 
                     
                    
                 
                    
                 
 
         
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号