gpt4 book ai didi

javascript - DriveApp.getStorageUsed() 与 DriveApp.getFiles() 返回的文件大小总和不匹配。

转载 作者:行者123 更新时间:2023-12-03 04:11:32 26 4
gpt4 key购买 nike

====================问题

当我使用以下代码时:

Logger.log(DriveApp.getStorageUsed())

我得到的值:6.888066988E9

该号码与 GDrive 上显示的号码相符。当我使用此代码时出现问题:

var files = DriveApp.getFiles()
var fileSizeTotal = 0;

while (files.hasNext()) {
fileSizeTotal += files.next().getSize()
}

我得到的值:3.539154182E9

按照我的逻辑,这些数字应该是相同的,但显然不是......

====================问题

导致差异的原因是什么?如何使迭代中的文件大小总和与 DriveApp.getStorageUsed() 调用的文件大小总和相匹配?

最佳答案

当我看到你的问题时,一开始我以为这种差异与垃圾箱有关。所以我制作了一个示例脚本来验证这一点。

作为示例文件,我在清理后的 Google 云端硬盘上放置了 2 个大小为 100 kbyte 的文本文件。我将一个文件放入垃圾箱。因为 Google 文档没有文件大小,如您所知。

示例脚本:

为了使用此示例,请启用 Drive API Advanced Google Services和 Google API 控制台。请执行run()

function run(){
var res;
res = getTotalFilesize(true)
Logger.log(res)
res = getTotalFilesize(false)
Logger.log(res)
}

function getTotalFilesize(trash) {
var token = "dummy";
var filesize = 0;
var numberOfFilesWithSize = 0;
var numberOfFiles = 0;
while (token) {
var res = Drive.Files.list({
q: trash ? "" : "trashed=false",
maxResults: 1000,
fields: "items(id, fileSize), nextPageToken",
pageToken: token && token != "dummy" ? token : ""
});
token = res.nextPageToken;
numberOfFiles += res.items.length;
res.items.forEach (function(e) {
if (e.fileSize) {
numberOfFilesWithSize++;
filesize += parseInt(e.fileSize, 10);
}
});
}
return {
IncludeTrash: trash ? "yes" : "no",
TotalFilesize: filesize,
NumberOfFilesWithSize: numberOfFilesWithSize,
TotalFiles: numberOfFiles
};
}

结果:

{NumberOfFilesWithSize=2.0, TotalFiles=2.0, TotalFilesize=200000.0, IncludeTrash=yes}
{NumberOfFilesWithSize=1.0, TotalFiles=1.0, TotalFilesize=100000.0, IncludeTrash=no}

getStorageUsed()getSize() 的结果分别为 200000.0 和 100000.0。共享文件包含在垃圾箱之外。因此,当共享 100 kByte 大小的文件时,上述结果都会增加 100 kByte。

讨论:

从这些结果来看,我认为 getStorageUsed()getSize() 之间的区别在于文件是否包含在垃圾箱中。

但我认为可能还有其他因素。如果你使用这个样本,我可以问一下你的结果吗?如果您的结果与我的估计不一样,我们就可以知道是否存在其他因素。

如果这些信息对您有帮助,我很高兴。

添加:

您还可以使用Drive.About.get()检索存储信息。谢谢@Sagar Kanabar。

var obj = Drive.About.get();
var out = {
usageInDrive: obj.quotaBytesUsed,
usageInTrash: obj.quotaBytesUsedInTrash
};
Logger.log(out)

>>> {usageInTrash=100000, usageInDrive=200000}

由此可知Drive中有100kb,Trash中有100kb。

关于javascript - DriveApp.getStorageUsed() 与 DriveApp.getFiles() 返回的文件大小总和不匹配。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44316170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com