用于C#-零长度文件更新的Google Drive API不起作用

用于C#-零长度文件更新的Google Drive API不起作用,c#,google-drive-api,C#,Google Drive Api,我正在尝试更新当前没有内容的Google驱动器文件。上传正文的长度只有几个字节。当我执行更新时,响应主体返回null,并且文件没有更新 当我试图通过上载空文件来清除文件内容时,也会出现此问题 我的代码适用于所有其他文件更新: File f = service.Files.Get("myid").Execute(); FilesResource.UpdateMediaUpload r = service.Files.Update(f, f.Id, s, i.MimeType); r.Fields

我正在尝试更新当前没有内容的Google驱动器文件。上传正文的长度只有几个字节。当我执行更新时,响应主体返回null,并且文件没有更新

当我试图通过上载空文件来清除文件内容时,也会出现此问题

我的代码适用于所有其他文件更新:

File f = service.Files.Get("myid").Execute();
FilesResource.UpdateMediaUpload r = service.Files.Update(f, f.Id, s, i.MimeType);
r.Fields = "id,md5Checksum";
r.Upload();
Console.WriteLine(r.ResponseBody.Md5Checksum);

如果我不查询响应主体,那么就没有错误,文件根本不会更新。我也不能下载空文件,但这很容易解决。

我也遇到过类似的问题。原因是
Execute
方法返回的file对象包含一个不可直接写入的非null属性。在本例中,此属性是
Id
。通过将
null
设置为
Id
,问题得以解决:

f.Id = null;
另一个更可靠的解决方案是实例化
文件
类,并直接设置所需的属性:

File f = new File();
f.MimeType = newMimeType;
FilesResource.UpdateMediaUpload r = service.Files.Update(f, fileId stream, newMimeType);
要检查更新/上载操作是否失败,可以使用以下代码:

FilesResource.UpdateMediaUpload r = service.Files.Update(f, fileId, stream, newMimeType);
IUploadProgress progress =  r.Upload();
if (progress.Status == UploadStatus.Failed)
{
    if (progress.Exception != null)
    {
        throw progress.Exception;
    }
    else
    {
        throw new InvalidOperationException("upload process failed");
    }
}