<p>I want to be able to create a file, distribute it to an end-user, but prevent them from making modifications to the file.</p>

<p>Now, obviously, I can't actually stop anybody from modifying the file - so my approach is to detect and reject the file if it's modified.</p>

<p>My intention is to generate a salted hash of the file contents and append it to the file. On reading, the hash is verified before reading the rest of the file. The downside of this is that I have to distribute the fixed "salt" in the executable which reads the file. Obviously I can obfuscate it to some extent, but that still feels like a weak link.</p>

<p>Are there any better approaches to solving this kind of problem?</p>

Not if you want a 100% solution. Just look at the movie and music industry. They have tried and failed for many years now :)
I think your solution is good enough. To make it harder to modify the file you could encrypt it, but then they can't read it, so it will only work if that is an ok limitation.