Temel dosya g/ç Visual c++ veya Visual c++ .NET nasıl

Makale çevirileri Makale çevirileri
Makale numarası: 307398 - Bu makalenin geçerli olduğu ürünleri görün.
İçin bir Microsoft Visual c++ .NET 2005/2008 ecma c+ +/ CLI sürümü bu makalede bakın 950617.
Bu, bir Microsoft Visual C# .NET sürümü için makalesi için bkz: 304430.
Microsoft Visual için Bu makalede temel .NET sürümü için bkz: 304427.
Bu makalede gösterir aşağıdaki Microsoft .NET Framework sınıf kitaplığı ad:
  • System::ComponentModel
  • System::Windows::Forms
  • System::Drawing
Hepsini aç | Hepsini kapa

Bu Sayfada

Özet

Bu adım adım makalede nasıl yapılacağı altı temel açıklar. dosya giriş/çıkış (g/ç) işlemlerini Microsoft Visual c++ .NET veya Microsoft Visual c++ 2005'te. .net Framework için yeni iseniz, .net Framework dosya işlemleri için nesne modeline benzer şekilde olduğunu göreceksiniz Microsoft Visual Studio 6.0 geliştiricilerin çoğu popüler olan FileSystemObject (fso). İçin daha kolay, bu konuda gösterilen işlevselliği geçişte makale aşağıdaki Microsoft Bilgi Bankası makalesi üzerinde dayanır:
186118 FileSystemObject ile nasıl kullanılır Visual Basic
.net Framework FileSystemObject kullanmaya devam edebilirsiniz. Bir bileşen nesne modeli (com) bileşeni FileSystemObject olduğu için .NET Framework gerektiriyor nesneye erişim ile birlikte çalışma katman olabilir. .net Framework için bir sarıcı oluşturur. Bunu kullanmak istiyorsanız, bileşen. Ancak, Dosya sınıfı, FileInfo sınıfı, Dizin, DirectoryInfo sınıfları ve .NET Framework ' ün ilgili diğer sınıflarda sunar Yük bindirmeden fso ile kullanılamaz işlevleri Birlikte çalışabilirlik katmanı.

Gereksinimleri

Aşağıdaki listede önerilen donanım, yazılım önerilmektedir, ağ altyapısı ve gereken hizmet paketleri:
  • Visual c++ 2005 veya Visual c++ .NET

Demonstrated dosya g/ç işlemleri

Bu makaledeki örneklerde, temel dosya g/ç işlemlerini açıklar. "Adım adım örnek" bölümüne bir örnek program oluşturma açıklanmaktadır aşağıdaki altı dosya g/ç işlemlerini gösterir:
  • Metin dosyası okuma
  • Bir metin dosyasına yazma
  • Dosya bilgilerini görüntüleme
  • Disk sürücülerinin listesi
  • Klasörler listesinde
  • Dosyaları listeleme

Metin dosyası okuma

Aşağıdaki örnek kodu StreamReader s?n?f? bir metin dosyasını okumak için kullanır. Dosyanın içeriği bir ListBox denetimi eklenir. Try... catch bloğu, dosya boşsa, program uyarmak için kullanılır. Vardır dosyanın sonuna ulaşıldığında belirlemek için birçok yolu olduğunu; Bu örnek bir sonraki satıra okumadan önce incelemek için Gözatma yöntemi kullanır.
  listBox1->Items->Clear();
   	try   
	{    
		String* textFile = String::Concat(windir,                                    (S"\\mytest.txt")); 
	        StreamReader *reader=new  StreamReader(textFile);
		do
		{
		    listBox1->Items->Add(reader->ReadLine());
		}   
		while(reader->Peek() != -1);
	}      
         
	catch (System::Exception *e)
	{ 
		listBox1->Items->Add(e);
	}

}
				
Not Visual c++ 2005'te, önceki kod örneği olarak yönetilen c++ başarıyla derlemek için ortak dil çalışma zamanı desteği derleyici seçeneği (/clr:oldSyntax) eklemeniz gerekir. Ortak dil çalışma zamanı desteği derleyici seçeneği eklemek için aşağıdaki adımları izleyin:
  1. ' I tıklatın Projeve ardındanProjectName Özellikler.

    NotProjectName Projenin adı için yer tutucudur.
  2. Genişlet Yapılandırma özelliklerive ardındanGenel.
  3. Sağ bölmede, seçmek için tıklatın Eski sözdizimi, ortak dil çalışma zamanı modülü desteği (/ clr:oldSyntax) içindeOrtak dil çalışma zamanı desteği Proje ayarları.
  4. ' I tıklatınUygulave ardından TAMAM.
Ortak dil çalışma zamanı desteği derleyici seçenekleri hakkında daha fazla bilgi için aşağıdaki Microsoft Developer Network (msdn) Web sitesini ziyaret edin:
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx

Bir metin dosyasına yazma

Bu örnek kod bir StreamWriter sınıf oluşturmak ve bir dosyaya yazmak için kullanır. Varolan bir varsa dosyayı, aynı yolla açabilirsiniz.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
pwriter->WriteLine(S"File created using StreamWriter class.");
pwriter->Close();
listBox1->Items->Clear();
String *filew = new String(S"File Written to C:\\KBTest.txt");
listBox1->Items->Add(filew);
				

Dosya bilgilerini görüntüleme

Bu örnek kod bir FileInfo sınıfı bir dosyanın özelliklerine erişmek için kullanır. Bu konuda Notepad.exe kullanılır örnek. Özellikler, ListBox denetiminin içinde görünür.
 listBox1->Items->Clear();
 String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
 FileInfo *pFileProps  =new FileInfo(testfile);

 listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );
 listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
				

Disk sürücülerinin listesi

Bu örnek kod sisteminde mantıksal sürücüleri listelemek için Dizin ve sürücü sınıfları kullanır. Bu örnek, Sonuçlar bir liste kutusu denetiminde görüntülenir.
  listBox1->Items->Clear();
  String* drives[] = Directory::GetLogicalDrives();
  int numDrives = drives->get_Length();
  for (int i=0; i<numDrives; i++)
  {
	listBox1->Items->Add(drives[i]);
  } 
				

Alt klasörler listesi

Bu örnek koda klasörlerin bir listesini elde etmek için Directory sınıfının GetDirectories yöntemini kullanır.
listBox1->Items->Clear();
String* dirs[] = Directory::GetDirectories(windir);
int numDirs = dirs->get_Length();
for (int i=0; i<numDirs; i++)
{
listBox1->Items->Add(dirs[i]);
}
				

Dosyaları listeleme

Bu örnek koda Directory sınıfının GetFiles yöntem dosyaların listesini almak için kullanır.
listBox1->Items->Clear();
String* files[]= Directory::GetFiles(this->windir);
int numFiles = files->get_Length();
for (int i=0; i<numFiles; i++)
{
  listBox1->Items->Add(files[i]);
}
				
Bir kullanıcının dosyalara erişimi aldığında, pek çok yanlış gidebilir. Dosyaları olmayabilir, dosya kullanımda olabilir veya kullanıcıların olmayabilir hakları erişmeye çalıştığınız klasör dosyaları. Göz önünde bulundurun olabilir özel durumları işlemek için kod yazdığınızda bu olanakları oluşturulur.

Adım adım örnek

  1. Microsoft Visual Studio .NET, Microsoft Visual Studio 2005 veya Microsoft Visual c++ 2005 Express Edition'ı başlatın.
  2. Üzerinde Dosya menüsü,Yenive ardından Proje.
  3. Altında Proje türleri,'ı tıklatınVisual c++ projeleri. Altında Şablonları bölümünde,'ı tıklatınWindows Forms uygulaması (.net).

    Not Visual Studio 2005'i tıklatın.Visual c++ altında Proje türleri. Altında Şablonları,'ı tıklatınWindows Forms uygulaması.
  4. Türü KB307398 içindeAdı kutusuna C:\ içindeKonum kutusunu tıklatın ve sonraTAMAM.
  5. Tasarımda Form1 formunu açın görüntülemek ve açmak için F4 tuşuna basın Propertries penceresini açın.
  6. Özellikler penceresinde genişletin Boyutuklasör. İçinde Genişlik kutusuna 700. İçinde Yükseklik kutusuna320.
  7. Bir tane ekleyin Liste kutusu Denetim ve altıDüğme Form1 denetim.

    Not Araç kutusunu görüntülemek için tıklatın Araç kutusu üzerinde Görünüm menü.
  8. Özellikler penceresinde değiştirmekKonum, Adı, Boyutu,TabIndexve Metin Bu özellikleri aşağıdaki gibi denetler:
    Bu tabloyu kapaBu tabloyu aç
    Denetim KimliğiKonumAdıBoyutuTabIndexMetin
    button1500, 32button1112, 231Metin dosyası okuma
    BUTTON2500, 64BUTTON2112, 232Metin dosyası yazma
    Button3500, 96Button3112, 233Dosya bilgilerini görüntüleme
    Button4500, 128Button4112, 234LIST DRIVES
    button5500, 160button5112, 235Alt klasörler listesi
    button6500, 192button6112, 236Dosyaları listeleme
    listBox124, 24listBox1450, 2000listBox1
  9. Form1.h dosyasını açın. Form1 sınıfı bildiriminde Aşağıdaki kod ile özel bir dize değişkeni bildirin:
    private:
    		String *windir;
  10. Form1 sınıf kurucusu içinde aşağıdaki kodu ekleyin:
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. Dosya giriş çıkış işlemleri gerçekleştirmek için System::IO Ekle ad alanı.
  12. Form1'i açmak için ÜSTKRKT + F7 tuşlarına basın Tasarım görünümünde. Metin dosyası okuma düğmesini çift tıklatın ve sonra aşağıdaki kodu yapıştırın:

    Not Visual c++ 2005'i tıklatın. Tasarımcı içinde Görünüm menü.
    // How to read a text file:
    // Use try...catch to deal with a 0 byte file or a non-existant file.
    listBox1->Items->Clear();
    
    try   
    {    
    	String* textFile = String::Concat(windir, (S"\\mytest.txt")); 
    	StreamReader *reader=new  StreamReader(textFile);
    	do
    	{
    	listBox1->Items->Add(reader->ReadLine());
    	}   
    	while(reader->Peek() != -1);
    }    
    catch(FileNotFoundException *ex)
    {
    	listBox1->Items->Add(ex);
    }  
            
    catch (System::Exception *e)
    { 
    	listBox1->Items->Add(e);
    }
  13. Form1'in Tasarım görünümünde Metin dosyası yazma düğmesini çift tıklatın ve sonra aşağıdaki kodu yapıştırın:
    // This demonstrates how to create and to write to a text file.
    StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
    pwriter->WriteLine(S"The file was created by using the StreamWriter class.");
    pwriter->Close();
    listBox1->Items->Clear();
    String *filew = new String(S"File written to C:\\KBTest.txt");
    listBox1->Items->Add(filew);
  14. Form1'in Tasarım görünümünde Dosya bilgilerini görüntüle düğmesini çift tıklatın ve sonra yönteminde aşağıdaki kodu yapıştırın:
    // This code retrieves file properties. The example uses Notepad.exe.
    listBox1->Items->Clear();
    String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
    FileInfo *pFileProps  =new FileInfo(testfile);
    
    listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );
    listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
  15. Form1'in Tasarım görünümünde, Sürücü listesi düğmesini çift tıklatın ve sonra aşağıdaki kodu yapıştırın:
    // This demonstrates how to obtain a list of disk drives.
    listBox1->Items->Clear();
    String* drives[] = Directory::GetLogicalDrives();
    int numDrives = drives->get_Length();
    for (int i=0; i<numDrives; i++)
    {
    	listBox1->Items->Add(drives[i]);
    }
  16. Form1'in Tasarım görünümünde, Alt klasörler listesi düğmesini çift tıklatın ve sonra aşağıdaki kodu yapıştırın:
    // This code obtains a list of folders. This example uses the Windows folder.
    listBox1->Items->Clear();
    String* dirs[] = Directory::GetDirectories(windir);
    int numDirs = dirs->get_Length();
    for (int i=0; i<numDirs; i++)
    {
    	listBox1->Items->Add(dirs[i]);                                                    
    }
  17. Form1'in Tasarım görünümünde Liste dosyaları düğmesini çift tıklatın ve sonra aşağıdaki kodu yapıştırın:
    // This code obtains a list of files. This example uses the Windows folder.
    listBox1->Items->Clear();
    String* files[]= Directory::GetFiles(this->windir);
    int numFiles = files->get_Length();
    for (int i=0; i<numFiles; i++)
    {
    	listBox1->Items->Add(files[i]);
    }
  18. Oluşturmak ve sonra programı çalıştırmak için ctrl + F5 tuşlarına basın.

Tam kod örneği

Not Visual c++ 2005'te çalıştırıldığında, aşağıdaki kodu değiştirmeniz gerekir.
//Form1.h
#pragma once


namespace KB307398
{
	using namespace System;
	using namespace System::IO;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary> 
	/// Summary for Form1
	///
	/// WARNING: If you change the name of this class, you will need to change the 
	///          'Resource File Name' property for the managed resource compiler tool 
	///          associated with all .resx files this class depends on.  Otherwise,
	///          the designers will not be able to interact properly with localized
	///          resources associated with this form.
	/// </summary>
	public __gc class Form1 : public System::Windows::Forms::Form
	{
	private:
		String *windir;
	public:
		Form1(void)
		{
			windir = System::Environment::GetEnvironmentVariable("windir");
			InitializeComponent();
		}
  
	protected:
		void Dispose(Boolean disposing)
		{
			if (disposing && components)
			{
				components->Dispose();
			}
			__super::Dispose(disposing);
		}
	private: System::Windows::Forms::Button *  button1;
	private: System::Windows::Forms::Button *  button2;
	private: System::Windows::Forms::Button *  button3;
	private: System::Windows::Forms::Button *  button4;
	private: System::Windows::Forms::Button *  button5;
	private: System::Windows::Forms::Button *  button6;
	private: System::Windows::Forms::ListBox *  listBox1;

	private:
		/// <summary>
		/// Required designer variable.
		/// </summary>
		System::ComponentModel::Container * components;

		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = new System::Windows::Forms::Button();
			this->button2 = new System::Windows::Forms::Button();
			this->button3 = new System::Windows::Forms::Button();
			this->button4 = new System::Windows::Forms::Button();
			this->button5 = new System::Windows::Forms::Button();
			this->button6 = new System::Windows::Forms::Button();
			this->listBox1 = new System::Windows::Forms::ListBox();
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(500, 32);
			this->button1->Name = S"button1";
			this->button1->Size = System::Drawing::Size(112, 23);
			this->button1->TabIndex = 1;
			this->button1->Text = S"Read Text File";
			this->button1->Click += new System::EventHandler(this, button1_Click);
			// 
			// button2
			// 
			this->button2->Location = System::Drawing::Point(500, 64);
			this->button2->Name = S"button2";
			this->button2->Size = System::Drawing::Size(112, 23);
			this->button2->TabIndex = 2;
			this->button2->Text = S"Write Text File";
			this->button2->Click += new System::EventHandler(this, button2_Click);
			// 
			// button3
			// 
			this->button3->Location = System::Drawing::Point(500, 96);
			this->button3->Name = S"button3";
			this->button3->Size = System::Drawing::Size(112, 23);
			this->button3->TabIndex = 3;
			this->button3->Text = S"View File Information";
			this->button3->Click += new System::EventHandler(this, button3_Click);
			// 
			// button4
			// 
			this->button4->Location = System::Drawing::Point(500, 128);
			this->button4->Name = S"button4";
			this->button4->Size = System::Drawing::Size(112, 23);
			this->button4->TabIndex = 4;
			this->button4->Text = S"List Drives";
			this->button4->Click += new System::EventHandler(this, button4_Click);
			// 
			// button5
			// 
			this->button5->Location = System::Drawing::Point(500, 160);
			this->button5->Name = S"button5";
			this->button5->Size = System::Drawing::Size(112, 23);
			this->button5->TabIndex = 5;
			this->button5->Text = S"List Subfolders";
			this->button5->Click += new System::EventHandler(this, button5_Click);
			// 
			// button6
			// 
			this->button6->Location = System::Drawing::Point(500, 188);
			this->button6->Name = S"button6";
			this->button6->Size = System::Drawing::Size(112, 23);
			this->button6->TabIndex = 6;
			this->button6->Text = S"List Files";
			this->button6->Click += new System::EventHandler(this, button6_Click);
			// 
			// listBox1
			// 
			this->listBox1->Location = System::Drawing::Point(24, 24);
			this->listBox1->Name = S"listBox1";
			this->listBox1->Size = System::Drawing::Size(450, 199);
			this->listBox1->TabIndex = 0;
			// 
			// Form1
			// 
			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
			this->ClientSize = System::Drawing::Size(692, 293);
			this->Controls->Add(this->listBox1);
			this->Controls->Add(this->button6);
			this->Controls->Add(this->button5);
			this->Controls->Add(this->button4);
			this->Controls->Add(this->button3);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->button1);
			this->Name = S"Form1";
			this->Text = S"Form1";
			this->ResumeLayout(false);

		}	
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {// This code shows how to read a text file.
// The try...catch code is to deal with a 0 byte file or a non-existant file.
listBox1->Items->Clear();

				try   
				{    
					String* textFile = String::Concat(windir, (S"\\mytest.txt")); 
					StreamReader *reader=new  StreamReader(textFile);
					do
					{
					listBox1->Items->Add(reader->ReadLine());
					}   
					while(reader->Peek() != -1);
				} 
				catch(FileNotFoundException *ex)
				{
					listBox1->Items->Add(ex);
				}	     
				        
				catch (System::Exception *e)
				{ 
					listBox1->Items->Add(e);
				}
			 }

private: System::Void button2_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code demonstrates how to create and to write to a text file.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
pwriter->WriteLine(S"The file was created by using the StreamWriter class.");
pwriter->Close();
listBox1->Items->Clear();
String *filew = new String(S"The file was written to C:\\KBTest.txt");
listBox1->Items->Add(filew);
		 }

private: System::Void button3_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code retrieves file properties. This example uses Notepad.exe.
listBox1->Items->Clear();
String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
FileInfo *pFileProps  =new FileInfo(testfile);

listBox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) );
listBox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
		 }

private: System::Void button4_Click(System::Object *  sender, System::EventArgs *  e)
		 {// The code demonstrates how to obtain a list of disk drives.
listBox1->Items->Clear();
String* drives[] = Directory::GetLogicalDrives();
int numDrives = drives->get_Length();
for (int i=0; i<numDrives; i++)
{
	listBox1->Items->Add(drives[i]);
}
		 }

private: System::Void button5_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code obtains a list of folders. This example uses the Windows folder.
listBox1->Items->Clear();
String* dirs[] = Directory::GetDirectories(windir);
int numDirs = dirs->get_Length();
for (int i=0; i<numDirs; i++)
{
	listBox1->Items->Add(dirs[i]);                                                    
}
		 }

private: System::Void button6_Click(System::Object *  sender, System::EventArgs *  e)
		 {// This code obtains a list of files. This example uses the Windows folder.
listBox1->Items->Clear();
String* files[]= Directory::GetFiles(this->windir);
int numFiles = files->get_Length();
for (int i=0; i<numFiles; i++)
{
	listBox1->Items->Add(files[i]);
}
		 }

};
}

//Form1.cpp
#include "stdafx.h"
#include "Form1.h"
#include <windows.h>

using namespace KB307398;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
	Application::Run(new Form1());
	return 0;
}

Referanslar

Daha fazla bilgi için aşağıdaki Microsoft Web sitesini ziyaret edin:
http://support.microsoft.com/default.aspx?xmlid=fh;en-US; vcnet
Windows forms içinde yönetilen oluşturma hakkında daha fazla bilgi için Extensions for c++, Visual Studio .NET içinde "ManagedCWinFormWiz" örnek bakın Yardımcı olur.

Özellikler

Makale numarası: 307398 - Last Review: 16 Ocak 2013 Çarşamba - Gözden geçirme: 6.0
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Visual C++ 2008 Express Edition
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Anahtar Kelimeler: 
kbwindowsforms kbforms kbio kbfileio kbhowtomaster kbnewsgrouplink kbmt KB307398 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir: 307398

Geri Bildirim Ver

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com