[ Pjer_Nis @ 06.08.2007. 10:46 ] @
Dakle imam potrebu da podignem fajl na FTP server iz desktop aplikacije koju radim u C# 2005.
Kod je sledeci:

public void uploadFile(string LocalDir, string fileName, string RemoteDir)
{
try
{
lbByteDWNL.Text = String.Empty;
lbByteDWNL.Update();
fileName = fileName.Trim();
string fullFilePath = String.Format("ftp://{0}//{1}//{2}", "xxx.xxx.xxx.xxx", RemoteDir, fileName).Trim();

FtpWebRequest request = (FtpWebRequest)WebRequest.Create(fullFilePath);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential("username", "password");

StreamReader sourceStream = new StreamReader(LocalDir + fileName);
byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());
sourceStream.Close();
request.ContentLength = fileContents.Length;

Stream requestStream = request.GetRequestStream();
requestStream.Write(fileContents, 0, fileContents.Length);
requestStream.Close();

FtpWebResponse response = (FtpWebResponse)request.GetResponse();
MessageBox.Show(response.StatusDescription);


response.Close();
}
catch { MessageBox.Show("Neuspelo"); }
}

I to "radi", odnosno podigne fajl, ali se njegova duzina razlikuje od originala. Na primer, kada podignem jpg fajl od 62.682 bajta, on je gore 108.570 bajtova, i kada ga skinem nazad, ne moze da se otvori kao slika.

Koliko sam uspeo da skontam, problem je u liniji

byte[] fileContents = Encoding.UTF8.GetBytes(sourceStream.ReadToEnd());

ali i kada imesto UTF8 stavim druge vrednosti, ili default, isti je problem samo je velicina fajla razlicita, ali nikad nije kako treba.
Ima li neko neku ideju?
[ dusty @ 06.08.2007. 15:28 ] @
Cini mi se problem je u konverziji na unicode. Probaj da stavis Encoding.ASCII i da koristis BinaryReader za citanje fajla.
[ Pjer_Nis @ 07.08.2007. 07:30 ] @
Reseno, evo koda koji resava problem ako nekome treba:

FileStream fs1 = new FileStream(LocalDir+fileName, FileMode.Open, FileAccess.Read);
byte[] fileContents = new byte[fs1.Length];
fs1.Read(fileContents, 0, Convert.ToInt32(fs1.Length));
fs1.Close();

Pozdrav svima i hvala.