If you find yourself reaching for the letters ‘AES’ or ‘CBC’, don't! Crypto engineering is already hard enough without having to worry about esoteric objects like a pseudorandom permutation family and a mechanism of whipping 128-bit blocks in chains with it.
If you must reach for something without thinking first about what you're trying to accomplish and what your threat model is and what security properties you want, reach for an authenticated encryption or AEAD scheme, e.g. NaCl crypto_secretbox_xsalsa20poly1305
, or if you must use FIPS-approved acronym soup, then AES-GCM. AE(AD) lets a sender transmit a message (any number of bytes) to a receiver who shares a secret key, so that nobody else can read the message or fool the receiver into accepting a message the sender didn't send.
If you break the file into chunks, you can enclose the message in a secretbox (or an unpronounceable aesgcm) with a secret key known to the sender and receiver for this file, and a nonce equal to number of chunks sent so far. The security contract of secretboxes is that you must pick the secret key uniformly at random and never reuse it with a nonce. The receiver opens the secretbox and doesn't worry about padding or anything; if opening the secretbox fails then it was a forgery.
If you must use a single key for multiple files, then you can either find some way to derive subkeys from it, or transmit a freshly generated key for each file before its first chunk, or, with NaCl crypto_secretbox_xsalsa20poly1305, just pick each nonce independently uniformly at random because the probability of collision in a 192-bit value is negligible.
See also chain and miscreant for a not-(yet)-standardized scheme and preliminary practical implementation of online streaming AEAD, which is basically what you seem to be looking for, and the CAESAR competition for a competition to pick the coolest-sounding AEAD acronym, with tough contestants like AEZ and NORX.