Determine if a file is ascii or binary

hi,

I am writing a VC++ 5 application. I need to determine if a file is a binary file or an ASCII file. Any ideas?
I tried opening the file and using the function isascii, but this
function succeeds for binary files as well.

Thanks, Ralph
rakhrasAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

chensuCommented:
The general way to determine if a file is a binary file or an ASCII file is to check if the file contains '\0' (a byte which value is zero). If yes, it is a binary file. If not, it is an ASCII file.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
nietodCommented:
A file could be binary and might not contain an binary 0.  I would search through for any character that is not a an ASCII letter (' ' to '~') or that is not a carriage return or line feed.  If a character is found that is not and ASCII letter, CR or LF, then the file is binary.  If all the characters are ASCII, CR's, or LF's, then the file is PROBABLY ASCII.  Note this is not perfect.  A binary file might be made up of bytes that all just happen to be ASCII letters.

An aditional test might be to look to see if the last character is a CR (or possibly a CR/LF).  Many ASCII files will end with a CR (or CR/LF).  This depends on the program that produces the files, though.  
0
wpintoCommented:
Hey rakhras,

In case you forgot, just wanted to remind you that there is locked question 'Debugging Release version', which you haven't evaluated yet :-)

Wilfred
0
Cloud Class® Course: C++ 11 Fundamentals

This course will introduce you to C++ 11 and teach you about syntax fundamentals.

chensuCommented:
nietod:
Don't forget that there are many languages besides English. And, I am not sure if the ASCII files rakhras mentions are really ASCII text files because there are double-byte text files and Unicode text files.
0
nietodCommented:
Hey, I'm just an ignorant American, my country, and my language are the center of the universe.

But anyway I'll revise my comment to make it more politically correct, even if I'm not.  

I still think looking for a binary zero is insufficient.  Finding one pretty much garantees that the file is binary, but not finding one does not necessarily mean the file is ASCII.

There are a bunch of procedures in the C++ standard library for testing characters.  These procedures work with unicode and multi-byte characters.  (I'm not familiar with any of them, because I'm an ignorant American, see above disclaimer)  Anyways, these procedures can be used to test each byte, or multi-byte in the file determine if it is a character.  If anything that is not a characters is found, the files is binary.  If everything is a character (or CR or LF), the file is probably ASCII.
0
rakhrasAuthor Commented:
thanks guys for your responses.
I've implemented a mix of your suggestions and it works fine.
So what is the protocol here for grading the answer; i've used suggestions from both chensu and nietod. If we should split the points, how do i do that? thanks,
ralph.
0
nietodCommented:
Unfortunately, you can't split points.  They are considering it.
But your thanks is enough for me.  (Although you could always send money <g>.)
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Development

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.