我做了一个 Windows 服务;
每小时通过 WebClient 从定期更新的内部数据库下载 CSV 文件。
将该 CSV 文件放入指定文件夹。
- 在原始测试用例中,它被放入我桌面上的本地文件夹 (C:)。
- 测试用例完美运行。
CSV 将用新下载的同名文件替换旧文件。
如上所列。这在本地文件夹上完美运行。但是,我们打算让它通过 Google Drive File Stream 工作。因为我们有一个 Google 表格,它可以为我们处理和查找给定名称下的任何 CSV 文件的数据。
这是当前下载和放置文件的方法。
public void CSVDownload()
{
string url = @"YOUR_CSV_URL_HERE";
WebClient client = new WebClient();
client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
client.DownloadFileAsync(new Uri(url), @"YOUR_GOOGLE_DRIVE_FILE_STREAM_FOLDER_HERE\NAME.csv");
void client_DownloadFileCompleted(object CSVDownload, AsyncCompletedEventArgs e)
{
eventLog1.WriteEntry("CSV File (NAME.csv) downloaded");
}
}
我的问题是为什么我目前不能通过 Windows 服务自动将文件上传到 Google Drive File Stream?是因为 Google Drive File Stream 需要某些权限或操作吗?是因为驱动器是“虚拟的”而不是物理的(H:)?以下是我尝试在 Google Drive File Stream (H:\My Drive\Test) 中上传到的文件夹。
代码也完全运行,因为日志文件显示使用了这些方法。但是,在下载和将 CSV 文件放入 Google Drive File Stream 文件夹之间似乎存在一些障碍。
更新:到目前为止进展甚微。我的一位同事可能建议需要一些用户许可才能推送。就像用户名和密码一样。如果这是真的,有谁知道我怎么能做到这一点?
更新#2:在“注册表编辑器”中,我发现了一些有趣的信息。
- 按 Windows + R
- 键入 regedit.exe
- HKEY_CURRENT_USER -> 软件 -> Google -> DriveFS -> 分享
如您所见,有两个值。' MountPoint = H
' 显然是它映射到的驱动器号和 ' ShellIpcPath = \\.\Pipe\GoogleDriveFSPipe_user.name_shell
' 这可能有用。我玩过 ShellcpPath 但没有占上风。
更新#3: @Ben Voigt 提到用于DriveInfo.GetDrives()
查看服务是否找到驱动器。我运行代码,它看起来确实存在。这是控制台吐出的内容:
Drive H:\
Drive type: Fixed
Volume label: Google Drive File Stream
File system: FAT32
Available space to current user: 15987068928 bytes
Total available space: 15987068928 bytes
Total size of drive: 16106127360 bytes
如您所见,它存在,但它使用File system: FAT32
而不是File system: NTFS
我所有其他驱动器使用(C:)、(D:) 等。因此,似乎只有 Google Drive File Stream 使用 FAT32。
测试用例:
将 CSV 文件放入本地文件夹时效果很好。
client.DownloadFileAsync(new Uri(url), @"C:\Users\user.name\Desktop\Test\designtasks.csv");
client.DownloadFileAsync(new Uri(url), @"C:\Users\user.name\Desktop\Test\designjobs.csv");
放入 Google Drive File Stream 文件夹时不起作用。
client.DownloadFileAsync(new Uri(url), @"H:\My Drive\Test\designtasks.csv");
client.DownloadFileAsync(new Uri(url), @"H:\My Drive\Test\designjobs.csv");
澄清测试用例。我实际上得到了两个 CSV 文件。但是,代码基本相同。所以我只提到在我原来的问题中得到一个,以保持它更干净和更直接。