Я сделал службу Windows, которая;
Загружает файл CSV из регулярно обновляемой внутренней базы данных через WebClient каждый час.
Поместите этот файл CSV в назначенную папку.
- В исходном тестовом примере он был помещен в локальную папку на моем рабочем столе (C:).
- Тестовый пример работал отлично.
CSV заменит старый файл на вновь загруженный файл с тем же именем.
Как указано выше.Это отлично работает на локальной папке.Тем не менее, мы намерены, чтобы он работал через Google Drive File Stream.Так как у нас есть Google Sheet, который манипулирует и ищет данные для нас для любого 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");
}
}
Мой вопрос: почему я не могу в настоящее время автоматически загружать файл в Google Drive File Stream через службу Windows?Это потому, что Google Drive File Stream требует определенных разрешений или действий?Это потому, что диск "виртуальный", а не физический (H :)?Ниже находится папка, в которую я пытаюсь загрузить файл Google Stream File Stream (H: \ My Drive \ Test).
Код также выполняетсяполностью, поскольку файлы журнала показывают, что методы используются.Однако между загрузкой и размещением CSV-файла в папке «Поток файлов на Google Диске», по-видимому, существует некоторый блок.
Обновление: Пока что достигнут незначительный прогресс.Один из моих коллег, возможно, предполагает, что нужно что-то запрашивать у пользователя разрешения на нажатие.Как имя пользователя и пароль.Если это правда, кто-нибудь знает, как мне этого добиться?
Обновление № 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 Диска.
client.DownloadFileAsync(new Uri(url), @"H:\My Drive\Test\designtasks.csv");
client.DownloadFileAsync(new Uri(url), @"H:\My Drive\Test\designjobs.csv");
Для уточнения по поводу теста.Я на самом деле получаю два файла CSV.Тем не менее, код в основном такой же.Поэтому я упоминаю только один вопрос в моем первоначальном вопросе, чтобы он был чище и понятнее.