1

サーバーのデフォルト以外のディレクトリにファイルをアップロードしようとすると、問題が発生します。

「ftp://server01/autofile/test.zip」を使用すると、autofile がデフォルトのディレクトリであるため、ファイルは問題なくアップロードされます。

しかし、以下のコードを使用すると、「リモート サーバーがエラーを返しました: (550) ファイルを利用できません (例: ファイルが見つからない、アクセスできません)」という例外が発生します。以下に示すのは、私が使用するコードです。

string inputfilepath = "E:\\Test\\test.ZIP";
string ftpfullpath = "ftp://server01/../bcp/ftp/ftpsftiu/test.ZIP";
FtpWebRequest ftp = (FtpWebRequest)FtpWebRequest.Create(ftpfullpath);
ftp.Method = WebRequestMethods.Ftp.UploadFile;
ftp.Credentials = new NetworkCredential("Username", "password");
ftp.UsePassive = true;
ftp.KeepAlive = true;
ftp.UseBinary = true;
FileStream fs = File.OpenRead(inputfilepath);
byte[] buffer = new byte[fs.Length];
fs.Read(buffer, 0, buffer.Length);
fs.Close();
Stream reqStream = ftp.GetRequestStream();

しかし、上記のデフォルト以外のディレクトリ パス (ftp://server01/../bcp/ftp/ftpsftiu/test.ZIP) は、Windows の [実行] コマンドで開くことができます。

C# コードを使用して、サーバーのこの既定以外のディレクトリにファイルをアップロードするにはどうすればよいですか? これを修正するのを手伝ってください。

前もって感謝します!!!

よろしく、シャドゥ

4

1 に答える 1

1

サーバーの後に別のスラッシュを付けるとうまくいきました(//server//)。私は(また)出力パス名を完全に修飾しました。静的な GetCread() は、自家製のクラスへのメソッド呼び出しです。

例:

static void Main(string[] args)
  {
     string strSystem = "MAPS";
     FtpWebRequest req = (FtpWebRequest)WebRequest.Create("ftp://" + strSystem +"//export/home/hinest/science/trans/fred.txt");
     req.Credentials = CGetCred.GetCred(strSystem);
     req.Method = WebRequestMethods.Ftp.UploadFile;
     FtpWebResponse resp = (FtpWebResponse)req.GetResponse();
     StreamWriter fileOut = new StreamWriter(req.GetRequestStream());
     StreamReader fileIn = new StreamReader(@"c:\science\"+strSystem+".txt");
     while (!fileIn.EndOfStream)
     {
        fileOut.WriteLine(fileIn.ReadLine());
     }
     fileIn.Close();
     fileOut.Close();
     resp.Close();
  }
于 2011-07-23T16:22:54.290 に答える