Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera como falei ali em encima eu tenho um programa que tira as prints e salva em uma pasta mais quero que invés de salvar ele envia pro Host via FTP ou outro método e salva lá no host.
Meu código para se conectar via FTP e este:
Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ftp://nome do host e caminho"), System.Net.FtpWebRequest)
request.Credentials = New System.Net.NetworkCredential("Usser", "Senha")
request.Method = System.Net.WebRequestMethods.Ftp.UploadFile
Dim file() As Byte = System.IO.File.ReadAllBytes("a pasta onde esta o arquivo para enviar.")
Dim strz As System.IO.Stream = request.GetRequestStream()
strz.Write(file, 0, file.Length)
strz.Close()
strz.Dispose() E galera este e meu código para tirar um print da tela.
Private Sub salvaTela()
Dim caminho As String = "caminho onde salva no PC"
Try
Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Dim screenGrab As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Dim g As Graphics = FromImage(screenGrab)
g.CopyFromScreen(New Point(0, 0), New Point(0, 0), ScreenSize)
screenGrab.Save(caminho & "Print" &.jpg", Imaging.ImageFormat.Jpeg)
Catch ex As Exception
MsgBox("Erro : " & ex.Message)
End Try
Ai galera quero que toda vez que tirar a print invés de salvar no pc envia pro host e salva.
Agradeço pela atenção!
Olá amigo obrigado pela ajuda.
Estou desenvolvendo em VB.NET VS 2013.
Estou min complicando neste código
dim ms as new IO.MemoryStream() //cria o memory stream
ms.open() //abre o ms
screenGrab.Save(ms, Imaging.ImageFormat.Jpeg) //salva a imagem na memória
ms.close() //fecha o stream
dim filebytes as byte() = ms.toArray() //transforma em bytes
Onde eu colocaria ele?
Em um modulo.
Olha só estou usando assim:
Private Sub salvarTela()
Dim ms As New IO.MemoryStream()
Dim screenGrab As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
ms.open()
Dim g As Graphics = FromImage(screenGrab)
g.CopyFromScreen(New Point(0, 0), New Point(0, 0), ScreenSize)
screenGrab.Save(ms, Now.Hour & "h" & "." & Now.Minute & "m" & "." & Now.Second & "s" & ".jpg", Imaging.ImageFormat.Jpeg)
ms.Close()
Dim filebytes As Byte() = ms.ToArray()
sendToFTP(filebytes)
End Sub
o ms.open não vai.
e da erro por causa do ms junto com o método &
.
Você não precisa colocar o nome da imagem no memory Stream, você só vai precisar disso na hora de salvar no servidor FTP, você deve ter um caminho de servidor para salvar.
Private Sub salvarTela()
Dim ms As New IO.MemoryStream()
Dim screenGrab As New Bitmap(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Dim ScreenSize As Size = New Size(My.Computer.Screen.Bounds.Width, My.Computer.Screen.Bounds.Height)
Dim g As Graphics = FromImage(screenGrab)
g.CopyFromScreen(New Point(0, 0), New Point(0, 0), ScreenSize)
screenGrab.Save(ms, Imaging.ImageFormat.Jpeg)
ms.Close()
Dim filebytes As Byte() = ms.ToArray()
if sendToFTP(filebytes) = 1 Then
MsgBox("Seu arquivo foi enviado com sucesso")
Else
MsgBox("Erro de envio")
End If
End Sub
Você criou o método sendToFTP?
Ok, Vlw.
Uma pergunta e se fosse fazer isto com uma string, exemplo salvar os arquivos no host em txt seria a mesma coisa?
Basicamente, só que você precisaria do caminho do arquivo de texto, se você tiver um arquivo de texto para enviar para o FTP a função ficaria assim:
Private Sub salvarArquivo()
Dim filebytes As Byte() = File.ReadAllBytes(<caminho>)
if sendToFTP(filebytes) = 1 Then
MsgBox("Seu arquivo foi enviado com sucesso")
Else
MsgBox("Erro de envio")
End If
End Sub
Se você quiser enviar só o texto você precisaria criar o arquivo lá.
Hum, mais tipo o que to fazendo aqui e pegar os processos do pc com a StreamWriter para gravar em cada e salvar mais como os nomes dos arquivos não são todos iguais e quero que ele salve direto no host e não no pc.
Não entendi.
Exemplos amigo:
Estou gravando uns dados em um arquivo txt, e ele grava cada dado exemplo nome: linha por linha.
e salva no caminho.
Agora preciso que ele salve direto no servidor host via FTP.
você vai ter que pegar esse texto todo que você quer e salvar em uma variável, depois você vai ter que criar um arquivo de texto usando esta variável, você pode criar em uma pasta do sistema como um arquivo temporário, depois você pega este arquivo como eu mostrei acima e transforma ele em bytes, ai você pode deletar o arquivo do sistema e enviar os bytes pela função do FTP.
De uma olhada no meu código te passarei por mensagem privada.
Cara, eu te dei a lógica completa, procura no google que você vai encontrar, vou até deixar um código de exemplo que cria um arquivo de texto em bytes aqui para você:
private void SendLog()
{
string text = ""; //cria variável que vai receber o texto
for (int i = 0; i < lbmessage.Items.Count; i++) //Montagem do texto do arquivo
{
text = text + lbmessage.Items[i].ToString() + Environment.NewLine;
}
MemoryStream ms = new MemoryStream(System.Text.Encoding.UTF8.GetBytes(text)); // adicionando o arquivo em um memoryStreamOk Vlw, Consegui fazer aqui a adaptação só que agora ele salva sim os arquivos que quero como eu desejo, mais salva todos os arquivos encima da linha ou seja e para salvar em um nova linha.
Exemplo:
Pro1 -
Pro2 -
Isto são os processos abertos que vão ser gravados no arquivo txt em uma nova linha.
Adicione o Environment.NewLine no final de cada item:
text = text + lbmessage.Items[i].ToString() + Environment.NewLine;
Não foi de uma olhada na parte do código.
Dim text As String = "" 'cria variável que vai receber o texto
Dim todosProc() As Process = Process.GetProcesses() 'crie um array com os processos atuais
For Each processo As Process In todosProc
text = (processo.ProcessName & " - " & processo.MainWindowTitle + Environment.NewLine) 'grava lista de processos no arquivo
Next processo
Não cara, o meu código está em C# e o concatenador no C# é o + no seu caso você coloca o &
text = processo.ProcessName & " - " & processo.MainWindowTitle & Environment.NewLine
Mesmo assim ainda não foi. :(
Porque você não está concatenando o texto que você já fez:
text = texto & processo.ProcessName & " - " & processo.MainWindowTitle & Environment.NewLine
Vlw Obrigado!
jogue o código de envio para ftp em um método, jogue esse seu bitmap em um memorystream para poder pegar os bytes dele, é só você fazer isso:
dim ms as new IO.MemoryStream() //cria o memory stream
ms.open() //abre o ms
screenGrab.Save(ms, Imaging.ImageFormat.Jpeg) //salva a imagem na memória
ms.close() //fecha o stream
dim filebytes as byte() = ms.toArray() //transforma em bytes
Ou olhe aqui:
http://stackoverflow.com/questions/7350679/convert-a-bitmap-into-a-byte-array-in-c
http://bytes.com/topic/visual-basic-net/answers/368879-memorystream-bytearray-bitmap
http://www.vbforums.com/showthread.php?358917-Converting-a-bitmap-to-a-byte-array
Ai seu método de envio para ftp vai ficar o seguinte:
public function sendToFTP(file as byte())
Try
Dim request As System.Net.FtpWebRequest = DirectCast(System.Net.WebRequest.Create("ftp://nome do host e caminho"), System.Net.FtpWebRequest)
request.Credentials = New System.Net.NetworkCredential("Usser", "Senha")
request.Method = System.Net.WebRequestMethods.Ftp.UploadFile
Dim strz As System.IO.Stream = request.GetRequestStream()
strz.Write(file, 0, file.Length)
strz.Close()
strz.Dispose()
Return 1
Catch e as exception
return 0
End Try
end function
Ai é só você chamar ele assim na sua função
dim ms as new IO.MemoryStream()
ms.open()
screenGrab.Save(ms, Imaging.ImageFormat.Jpeg)
ms.close()
dim filebytes as byte() = ms.toArray()
sendToFTP(filebytes)