私はWindowsサービスを作成しました。
定期的に更新される内部データベースから WebClient を介して 1 時間ごとに CSV ファイルをダウンロードします。
その CSV ファイルを指定のフォルダーに入れます。
- 元のテスト ケースでは、デスクトップ (C:) のローカル フォルダーに配置されていました。
- テストケースは完璧に機能しました。
CSV は、古いファイルを新しくダウンロードした同じ名前のファイルに置き換えます。
上記のとおりです。これは、ローカル フォルダーで完全に機能します。ただし、Google ドライブ ファイル ストリームを介して機能する予定です。指定された名前の CSV ファイルのデータを操作して検索する Google スプレッドシートがあるためです。
これは、ファイルをダウンロードして配置する現在の方法です。
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 ドライブ ファイル ストリームに自動的にアップロードできないのはなぜですか? Google ドライブ ファイル ストリームに特定の権限やアクションが必要なためですか? ドライブが「仮想」であり、物理的ではないためですか(H :)?以下は、Google ドライブ ファイル ストリーム (H:\My Drive\Test) にアップロードしようとしているフォルダーです。
メソッドが使用されていることがログ ファイルに示されているため、コードも完全に実行されます。ただし、CSV ファイルのダウンロードと Google ドライブ ファイル ストリーム フォルダへの配置の間には、何らかのブロックがあるようです。
更新:これまでのところ、ほとんど進展がありません。私の同僚の 1 人は、プッシュするには何らかのユーザー許可を求める必要があると提案しているかもしれません。ユーザー名とパスワードのように。これが本当なら、私がこれを達成する方法を知っている人はいますか?
更新 #2:「レジストリ エディター」で興味深い情報を見つけました。
- Windows + Rを押します
- regedit.exeと入力します
- HKEY_CURRENT_USER -> ソフトウェア -> Google -> DriveFS -> 共有
ご覧のとおり、2 つの値があります。' MountPoint = H
' はマップ先のドライブ文字であり、' ShellIpcPath = \\.\Pipe\GoogleDriveFSPipe_user.name_shell
' は役に立つかもしれません。私は ShellcpPath をいじりましたが、うまくいきませんでした。
更新 #3: @Ben VoigtDriveInfo.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
ご覧のとおり、存在しますが、他のすべてのドライブが (C:)、(D:) などを使用するFile system: FAT32
代わりに使用します。File system: NTFS
そのため、FAT32 を使用しているのは Google Drive File Stream だけのようです。
テストケース:
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");
テストケースについて明確にする。私は実際に2つのCSVファイルを取得しています。ただし、コードは基本的に同じです。したがって、元の質問では、それをよりクリーンで簡単にするために1つ取得することについてのみ言及しています。