Why user_save overrides user picture? I have a user profile form. If a user selects a picture, it's uploaded and shows on user profile but If user just updates other details and leaves the picture the same the user_save overrides the user picture and then there is no user picture. 
My code is like this. 

if(!empty($_FILES['files']['name']['profile_image']) &amp;&amp; isset($_FILES['files']['name']['profile_image']) &amp;&amp; ($_FILES['files']['size']['profile_image'] != 0)) {

        $filepath = 'public://pictures/';
        $file = file_save_upload('profile_image', $validators, $filepath);
        $file-&gt;status = 1;
        file_save($file);
        if(isset($file) &amp;&amp; !empty($file) &amp;&amp; !is_null($file)) {
            $loaded_user-&gt;picture = $file;
        }

    }
user_save
I assume you are not setting you default_value for the file field and that you are using a managed_file field.

The default value should be the fid of the file that has been uploaded before.

Something like this:

$form['profile_image'] = array(
  '#title' =&gt; t('Profile picture'),
  '#type' =&gt; 'managed_file',
  '#description' =&gt; t('Upload a photo for your profile.'),
  '#default_value' =&gt; $previously_uploaded_file-&gt;fid,
);


In your case I'm not exactly sure where the $previously_uploaded_file->fid will come from, but I assume it will be in your form or form state or else you will have to get it from the database or something.

If you are using a regular file field instead of a managed_file file field I don't believe you can set a default value.

In that case you have to make sure that when you do the user save that you are not overwriting the file with an empty value.