Цель, которую я имею, проста: из веб-приложения запишите в папку на диске D локального сервера. Когда я запускаю код локально (в отладчике), он красиво записывает в папку. Когда я публикую код на веб-сервере, он не может видеть свой собственный диск D или общую папку. Я пробовал каждую перестановку строки пути файла, которую я могу себе представить, включая абсурдные.Исключение Directory Not Found при развертывании на сервере
Примеры:
filepath = "\\\\wsbliwad\\d\\Payroll\\PaperlessPay";
filepath = "\\wsbliwad\\d\\Payroll\\PaperlessPay";
filepath = "\\wsbliwad\d\Payroll\PaperlessPay";
filepath = "\\\\wsbliwad\\Payroll\\PaperlessPay";
filepath = "\\wsbliwad\Payroll\PaperlessPay";
filepath = @"\\wsbliwad\payroll\PaperlessPay";
filepath = @"\\\\wsbliwad\\payroll\\PaperlessPay";
filepath = @"\\wsbliwad\\payroll\\PaperlessPay";
filepath = @"\\wsbliwad\d\Payroll\PaperlessPay"
... и множество других.
Использование response.write заявления, чтобы получить ощущение того, что происходит, если я запускаю код локально, я получаю обратную связь:
Path one = \\wsbliwad\payroll\PaperlessPay
Exists = True
Path two = \\wsbliwad\\payroll\\PaperlessPay
Exists = True
Path one = \\\\wsbliwad\\payroll\\PaperlessPay
Exists = True
Host Name is CPU1476
AD User is ANVILCORP\DGray
И файл записывает в папку.
Когда я раскрываю тот же код, я получаю результат неудовлетворительную:
Path one = \\wsbliwad\payroll\PaperlessPay
Exists = False
Path two = \\wsbliwad\\payroll\\PaperlessPay
Exists = False
Path one = \\\\wsbliwad\\payroll\\PaperlessPay
Exists = False
Host Name is WSBLIWAD
AD User is ANVILCORP\dgray
Файл не записывается.
Я перешел в папку и явно предоставил разрешения на запись всем пользователям нашей группы, которые в ней нуждаются, думая, что это была проблема с сообщением о разрешении. Нет такой удачи.
Одна из особенностей, отмеченная мной, заключается в том, что последняя строка в моем ответе.write дает мне буквы верхнего регистра для пользователя домена, когда я запускаю его в отладчике, и строчные буквы при развертывании кода. Я не знаю, что это должно иметь значение, но это кажется странным.
Любые идеи, почему код может видеть общую папку из моего отладчика, но не при развертывании?
Для запроса DJ Kraze'S ниже:
protected void btn_Export_Click(object sender, EventArgs e)
{
DateTime mCheckDate = DateTime.Parse(tb_CheckDate.Text);
int mPeriod = Int32.Parse(tb_Period.Text);
try
{
string checkDateFormat = "MM/dd/yyyy";
ReadOnlyCollection<IDataRow> dataRows = FlatFileExportWeb.PaperlessPay.GetPaperlessPayData(mPeriod.ToString(), mCheckDate.ToString(checkDateFormat));
if (dataRows == null)
return;
IDataFormat format = new SimpleDataFormat(dataRows);
string filepath = "";
string machineName = System.Net.Dns.GetHostName();
if (machineName == "WSBLIWAD")
{
// This path does not work
filepath = @"\\wsbliwad\d$\Payroll\PaperlessPay";
}
else
{
// this path works when debugging
filepath = @"\\wsbliwad\payroll\PaperlessPay";
}
string filename = "PaperlessPay" + mCheckDate.ToString("MMddyyyy") + ".txt";
new FileGenerator(filepath, filename).BuildFile(format);
Response.Write("<br /> Success!! The flat file has been written to " + filepath + @"\" + filename);
}
catch (Exception ex)
{
// Display any exceptions that may have been thrown.
System.Web.HttpContext.Current.Response.Write(ex);
}
}
... а потом ...
// Absolute path with concatenated filename
string mFilenameWithPath;
/// <summary>
/// Constructs a FileGenerator instance pointing to filepath\PaperlessPay\filename.
/// Will delete pre-existing file at this location.
/// </summary>
public FileGenerator(string filepath, string filename)
{
if (!Directory.Exists(filepath))
throw new DirectoryNotFoundException(filepath);
mFilenameWithPath = filepath + @"\" + filename;
if (File.Exists(mFilenameWithPath))
File.Delete(mFilenameWithPath);
}
/// <summary>
/// Given an IDataFormat instance, BuildFile builds an output string.
/// It will then write this output string to the file specified within
/// the class, as passed into the constructor.
/// </summary>
/// <param name="format"></param>
public void BuildFile(IDataFormat format)
{
// Make sure the format exists
if (format == null)
return;
// Collect output string, and
// write the string to filepath.
using (StreamWriter writer = File.CreateText(mFilenameWithPath))
writer.Write(format.Build());
}
Какой пользователь выполняет IIS как на целевом сервере? –
При использовании путей каталогов по сети вам нужно использовать '$' в вашем пути к файлу, например '\ имя_сервера \ c $ \ имя_папки \' имя_сервера \ имя_применения \ имя_папки ', что имеет смысл, если вы делаете это с помощью веб-приложения вы должны посмотреть на «MapServerPath» – MethodMan
@DJKRAZE Не для названных акций, вы этого не делаете; это только для административных долей C :, D :, и т. д. «$» просто означает, что он скрыт от любого браузера. –